这是一个面试问题.直到现在,我曾经认为这些问题纯粹依赖于编译器,不应该担心我,但现在,我对它很好奇.
假设您有两种结构:
struct A {
int* a;
char b;
}
Run Code Online (Sandbox Code Playgroud)
而且,
struct B {
char a;
int* b;
}
Run Code Online (Sandbox Code Playgroud)
那么你更喜欢哪一个?为什么?我的回答是这样的(虽然我有点在黑暗中拍摄)第一个结构应该是首选的,因为编译器为字大小的一些倍数(这是指针的大小 - 在32上的4个字节)分配结构的空间位机和64位的8字节).因此,对于这两种结构,编译器将分配8个字节(假设它是32位机器).但是,在第一种情况下,填充将在所有变量之后(即在a和b之后)完成.因此,即使有一些机会,b得到一些溢出的值并破坏我的下一个填充字节,但我的a仍然是安全的.
他似乎并不高兴,并要求第一个结构在第二个结构上的一个缺点.我没有太多话要说.:d
请帮我解答.