This question already has answers here:
Why isn't sizeof for a struct equal to the sum of sizeof of each member?
(11个答案)
Structure padding and packing
(8个答案)
4年前关闭。
我们知道,结构中声明变量的正确顺序也会由于填充而改变结构的大小。我已经看到了参考文献here。
假设一个结构是:
因此,
所以我的问题是:为什么在结构中进行填充?这个概念的必要性是什么?
因为没有填充,结构的尺寸较小。我的问题与填充的发生时间无关,而是与填充的概念有关。
(11个答案)
Structure padding and packing
(8个答案)
4年前关闭。
我们知道,结构中声明变量的正确顺序也会由于填充而改变结构的大小。我已经看到了参考文献here。
假设一个结构是:
struct s {
char b; //1 for char
char c; //1 for char + 2 for padding
int a; //4 for int
}my_struct;
因此,
my_struct
的大小为8
,但如果不填充,则可以为6
,小于8
。所以我的问题是:为什么在结构中进行填充?这个概念的必要性是什么?
因为没有填充,结构的尺寸较小。我的问题与填充的发生时间无关,而是与填充的概念有关。
最佳答案
许多计算机体系结构都以不同于1字节(通常1个字= 4字节)的对齐方式优化了内存访问。对齐的访问通常比未对齐的访问要快(有时无法访问未对齐的数据)。因此,编译器以最佳对齐方式打包结构成员。在您的示例中,看起来对齐的大小为2个字节,因此b
的偏移量为0,c
的偏移量为2,而a
的偏移量为4,总计8个字节(假设a
为4个字节)。或者,根据内联注释,在您的示例中,看起来最佳对齐方式等于数据大小。因此,b
和c
相邻,因为大小为1,对齐方式也是如此,但是a
为4字节长,因此需要4字节对齐。
最重要的是-这完全取决于体系结构。
关于c++ - 为什么需要在结构中填充? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30589197/