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

假设一个结构是:

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个字节)。或者,根据内联注释,在您的示例中,看起来最佳对齐方式等于数据大小。因此,bc相邻,因为大小为1,对齐方式也是如此,但是a为4字节长,因此需要4字节对齐。

最重要的是-这完全取决于体系结构。

关于c++ - 为什么需要在结构中填充? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30589197/

10-11 23:03
查看更多