结构填料
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。
我希望解释得通。
再看看这张图,我觉得如果所有的数据都对齐到包的同一边会更好,要么向下要么向上。这将使发生的事情更清楚。
我目前正在学习 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。
我希望解释得通。
再看看这张图,我觉得如果所有的数据都对齐到包的同一边会更好,要么向下要么向上。这将使发生的事情更清楚。