例如,我有一个class,
class naive {
public:
char a;
long long b;
char c;
int d;
};
根据我的测试程序,a对d被陆续建成,像
a------- bbbbbbbb c---dddd
- 意味着未使用
为什么C++不能让它变得更紧,比如
ac--dddd bbbbbbbb
根据这篇文章的讨论,我理解结构成员对齐的主要原因是性能(以及一些架构限制).
如果我们将在编译32位x86时调查Microsoft(Visual C++),Borland/CodeGear(C++ - Builder),Digital Mars(DMC)和GNU(GCC):对齐为int4个字节,如果int未对齐,则可能会发生2行存储体读取.
我的问题是为什么不double将4字节对齐呢?4个字节对齐double也会导致2行内存库读取....
例如,在以下示例中,由于double是8对齐的,因此结构的实际大小将是sizeof(char) + (alignment for double padding) + sizeof(int) = 20 bytes.
typedef struct structc_tag{
char c;
double d;
int s;
} structc_t;
Run Code Online (Sandbox Code Playgroud)
谢谢