结构内存分配,存储器分配应该在4的倍数(Struct memory allocation, memo

2019-10-29 05:51发布

struct x
{
  char b;
  short s;
  char bb;
};


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

输出是:6

我运行在32位编译器的代码。 输出应为8个字节。

我的解释 - > 1.字符需要1个字节,接下来的短期需要是2的倍数如此之短创造的1填充,并且需要2个字节,这里已分配4个字节。 现在唯一左炭构件需要1个字节但是由于存储器分配在4所以总体存储器倍数给出为8个字节。

Answer 1:

一个结构的对准的要求是与最大对齐的构件构成。 这里的最大对齐是short ,所以大概2 。 因此,两个用于b ,两个用于s ,两个用于bb得到6。



Answer 2:

在C结构的内存布局完全实现特定的,您不能承担这一切。

另外,在C中的结构这样的结构的典型取向:

struct MyData
{
    short Data1;
    short Data2;
    short Data3;
};

也将具有的sizeof = 6,因为如果类型“短”被存储在存储器的两个字节然后以上描述的数据结构的每个成员将2字节对齐。 DATA1将在偏移0,数据2在偏移2和数据3在偏移4.本结构的大小将是6个字节。

见https://en.wikipedia.org/wiki/Data_structure_alignment



文章来源: Struct memory allocation, memory allocation should be in multiple of 4
标签: c memory struct