首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构内存分配,内存分配应为4的倍数。

结构内存分配,内存分配应为4的倍数。
EN

Stack Overflow用户
提问于 2018-09-06 18:50:56
回答 2查看 193关注 0票数 0
代码语言:javascript
复制
struct x
{
  char b;
  short s;
  char bb;
};


int main()
{
 printf("%d",sizeof(struct x));
}

产出为:6

我在32位编译器上运行这段代码。输出应该是8个字节。

我的解释是-> 1. Char需要1字节,下一个短的需要2的倍数,所以短创建一个填充1,占用2个字节,这里已经分配了4个字节。现在,唯一的左char成员占用1字节,但是由于内存分配是4的倍数,所以总的内存分配是8字节。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-06 18:53:55

结构的对准要求是对齐度最大的构件。这里的最大对齐是针对short的,所以很可能是2。因此,两个用于b,两个用于s,两个用于bb提供6。

票数 5
EN

Stack Overflow用户

发布于 2018-09-06 19:22:16

C结构内存布局完全是特定于实现的,您不能假设所有这些。

此外,在C的典型对齐中,结构是这样的:

代码语言:javascript
复制
struct MyData
{
    short Data1;
    short Data2;
    short Data3;
};

如果类型"short“存储在两个字节的内存中,那么上面描述的数据结构的每个成员都是对齐的。Data1的偏移量为0,Data2为偏移量2,Data3为偏移量4,此结构的大小为6个字节。

请参阅alignment

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52210482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档