结构填料和包装考虑:struct mystruct_A{
char a;
int b;
char c;} x;struct mystruct_B{
int b;
char a;} y;结构的尺寸分别为12和8。这些结构是填充还是包装?什么时候进行填充或包装?
3 回答
喵喔喔
TA贡献1735条经验 获得超5个赞
我知道这个问题很老,这里的大多数答案都很好地解释了填充,但是在我自己试图理解它时,我觉得有一个“视觉”形象正在发生的事情有所帮助。
处理器以确定大小(字)的“块”读取存储器。假设处理器字长8个字节。它会将内存视为8字节构建块的大行。每当它需要从内存中获取一些信息时,它将到达其中一个块并获得它。
如上图所示,Char(长度为1个字节)的位置无关紧要,因为它位于其中一个块内部,要求CPU只处理1个字。
当我们处理大于一个字节的数据时,如4字节的int或8字节的双字节,它们在内存中的对齐方式会对CPU必须处理的字数产生影响。如果4字节块以某种方式对齐,它们总是适合块的内部(存储器地址是4的倍数),则只需要处理一个字。否则,一个4字节的块可能在一个块上有一部分,而在另一个块上有一部分,要求处理器处理2个字以读取该数据。
这同样适用于8字节的双精度数,除非它现在必须在8的存储器地址中,以保证它总是在一个块内。
这考虑了一个8字节的字处理器,但这个概念适用于其他大小的字。
填充通过填充这些数据之间的间隙来确保它们与这些块对齐,从而在读取内存时提高性能。
然而,正如其他人所说的那样,有时候空间比表演本身更重要。也许你在没有太多RAM的计算机上处理大量数据(可以使用交换空间,但速度要慢得多)。您可以在程序中安排变量,直到填充最少(因为它在其他一些答案中得到了很好的例证),但如果这还不够,您可以明确禁用填充,这就是打包。
- 3 回答
- 0 关注
- 533 浏览
添加回答
举报
0/150
提交
取消