c - 使用 malloc 的结构数据对齐

标签 c malloc memory-alignment

考虑我的结构如下。

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/

相关文章:

c - 动态分配内存给二维字符数组

c - 如何解释数据类型大小及其对齐方式?

连接两个十六进制整数并将它们保存在 long long int C 中

c - 返回值3221225725,可能缓冲区溢出?

objective-c - 圆弧和 Malloc : EXEC_BAD_ACCESS

C:尝试释放从函数返回的 malloc'd char 数组导致错误

c++ - C(++) 结构力额外填充

c++ - 对于所有对象类型 T,sizeof(T) >= alignof(T) 是否总是如此?

c - 使客户端持续响应来自服务器的消息

c - 如何使函数具有库内部链接?