为了账号安全,请及时绑定邮箱和手机立即绑定

结构填料和包装

结构填料和包装

C C++
偶然的你 2019-05-29 17:26:05
结构填料和包装考虑: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的计算机上处理大量数据(可以使用交换空间,但速度要慢得多)。您可以在程序中安排变量,直到填充最少(因为它在其他一些答案中得到了很好的例证),但如果这还不够,您可以明确禁用填充,这就是打包


查看完整回答
反对 回复 2019-05-29
  • 3 回答
  • 0 关注
  • 533 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信