Poo*_*ria 1 c++ padding visual-studio-2010 memory-alignment visual-c++
考虑以下简单结构:
struct Struct {
public:
char a;
short int b;
char c;
};
Run Code Online (Sandbox Code Playgroud)
如果此结构的实例放置在偶数(16位对齐)地址,则需要两个填充字节来修复对齐(对于b数组中的任何后续实例都是如此).
但是,实例可以放在奇数地址,然后即使没有填充字节,对齐仍然是正确的.
所以我做了一个测试并观察到Visual C++ 2010将添加这两个填充字节,这表明它总是将它们放在偶数地址.
为什么VC++不会将它们放在奇数地址上,每个对象节省2个字节?有什么我不知道的吗?
确实如果那个结构没有填充,那么它可以放在一个奇数地址上,它的每个成员都可以分别正确对齐.
问题是编译器如何将其置于奇数地址.可以肯定的是,可以安排一个自动存储变量.但是由分配的堆分配变量malloc呢?malloc遵守的合同是它必须返回一个内存块,该内存块适用于任何类型的对象.而且malloc永远不能做,如果存在需要一些物体被放置在奇地址.
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |