考虑我的结构如下。
struct st
{
char c;
double d;
int i;
};
根据struct st
的内存对齐大小将为(1+7(填充)+8+4+4(填充))=24字节
当我执行如下 malloc
时
struct st *p = malloc(sizeof(*p));
它将与
相同struct st *p = malloc(13);
既然我们只是传递结构体的大小(13字节),那么malloc如何分配24字节来满足内存对齐的需要?
最佳答案
这个问题错误地假设
struct st *p = malloc(sizeof(*p));
与
相同struct st *p = malloc(13);
事实并非如此。要测试,
printf ("Size of st is %d\n", sizeof (*p));
打印 24
,而不是 13。
分配和管理结构的正确方法是使用 sizeof(X)
,而不是假设有关元素如何打包或对齐的任何信息。
关于c - 使用 malloc 的结构数据对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52155317/