结构填料和包装

结构填料和包装

考虑:

struct mystruct_A{
   char a;
   int b;
   char c;} x;struct mystruct_B{
   int b;
   char a;} y;

结构的尺寸分别为12和8。

这些结构是填充还是包装?

什么时候进行填充或包装?


偶然的你
浏览 534回答 3
3回答

喵喔喔

我知道这个问题很老,这里的大多数答案都很好地解释了填充,但是在我自己试图理解它时,我觉得有一个“视觉”形象正在发生的事情有所帮助。处理器以确定大小(字)的“块”读取存储器。假设处理器字长8个字节。它会将内存视为8字节构建块的大行。每当它需要从内存中获取一些信息时,它将到达其中一个块并获得它。如上图所示,Char(长度为1个字节)的位置无关紧要,因为它位于其中一个块内部,要求CPU只处理1个字。当我们处理大于一个字节的数据时,如4字节的int或8字节的双字节,它们在内存中的对齐方式会对CPU必须处理的字数产生影响。如果4字节块以某种方式对齐,它们总是适合块的内部(存储器地址是4的倍数),则只需要处理一个字。否则,一个4字节的块可能在一个块上有一部分,而在另一个块上有一部分,要求处理器处理2个字以读取该数据。这同样适用于8字节的双精度数,除非它现在必须在8的存储器地址中,以保证它总是在一个块内。这考虑了一个8字节的字处理器,但这个概念适用于其他大小的字。填充通过填充这些数据之间的间隙来确保它们与这些块对齐,从而在读取内存时提高性能。然而,正如其他人所说的那样,有时候空间比表演本身更重要。也许你在没有太多RAM的计算机上处理大量数据(可以使用交换空间,但速度要慢得多)。您可以在程序中安排变量,直到填充最少(因为它在其他一些答案中得到了很好的例证),但如果这还不够,您可以明确禁用填充,这就是打包。
打开App,查看更多内容
随时随地看视频慕课网APP