#include <stdio.h>
#include <stdlib.h>
struct stu{
char a;
int b;
char c;
};
int main(){
struct stu stu1;
stu1.b = 12;
struct stu stu2;
stu2.b = 10;
printf("%u\n", (int)sizeof(stu1));
return 0;
}
代码如上。
(顺便问一下,如果不给stu1和stu2的b元素幅值,貌似stu1和stu2在同一个地址,或者说,gcc编译器优化掉了一个未初始化且未使用的变量?)
打印各个变量的地址,如下:
&stu1
0x7fffffffe000
&stu1.a
0x7fffffffe000
&stu1.b
0x7fffffffe004
&stu1.c
0x7fffffffe008
&stu2
0x7fffffffe010
&stu2.a
0x7fffffffe010
&stu2.b
0x7fffffffe014
&stu2.c
0x7fffffffe018
stu1和stu2的内存占用都没问题,各占12个字节,但是二者之间为什么空出来4个字节?也就是0x7fffffffe0c~0x7fffffffe00f这段空间。
栈上分配内存不应该是连续的么?
谢谢!
地址优化导致的,CPU在访问字边界地址的时候速度会快,所以有些编译器把变量的地址优化成4或者8的整数倍,导致两个变量之间出现空隙。