结构填料

Structure Packing

我目前正在学习 C#,我的第一个项目(作为学习实验)是创建一个 DBF reader。根据这个,我在理解 "packing" 时遇到了一些困难:http://www.developerfusion.com/pix/articleimages/dec05/structs1.jpg

如果我指定了 2 的封装,那么所有结构元素是否都以 2 字节边界开始,如果我指定了 4 的封装,那么所有结构元素不是都以 4 字节边界开始,并且每个至少消耗 4 个字节?

例如,一个 byte 元素将被放置在 4 字节边界上,它后面的元素(在顺序布局中)将位于下一个 4 字节边界上(丢失 3 个字节以填充)?

在显示的图像中,在 "pack=4" 中它显示了一个 byte,它位于一个 2 字节的边界上,在 short.

之后

如果我没看错的话,pack等于n的意思是一个变量不能存储"between"两包长度n。换句话说,组成变量的字节不能跨越一个包的边界。这仅在变量的大小小于或等于包的大小时才成立。

我们以Pack = 4为例。在这里,我们可以安全地将一个字节和一个短整型存储在一个包中,因为它们一起需要 3 个字节的内存。但是由于包中只剩下一个字节,所以需要填充一个字节才能将一个int存储到数据结构中,因为包中剩下的东西太少了,无法存储整个int。

我希望解释得通。

再看看这张图,我觉得如果所有的数据都对齐到包的同一边会更好,要么向下要么向上。这将使发生的事情更清楚。