考虑我有如下结构。
struct st
{
char c;
double d;
int i;
};
根据内存对齐大小,struct st
将为(1 + 7(papped)+ 8 + 4 + 4 + 4(papped))= 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)
,而不是假设元素是如何打包或对齐的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句