【发布时间】:2019-01-18 22:38:09
【问题描述】:
这段代码的输出:
int a;
int b;
cout<<"a: "<<&a<<endl;
cout<<"b: "<<&b<<endl;
是:
a: 0x6ffe4c
b: 0x6ffe48
有道理,它们之间应该相差4个字节,但是这段代码的输出:
int A[1];
int B[1];
cout<<"A: "<<A<<endl;
cout<<"B: "<<B<<endl;
是:
A: 0x6ffe40
B: 0x6ffe30
所以现在差异是 16 个字节,谁能解释为什么?为什么需要这个差距?当您像这样分配数组时,我不知道堆栈中存在间隙,并认为在这种情况下 B[1] 与 A[0] 相同。
【问题讨论】:
-
你使用哪个编译器?
-
GCC的Mingw端口
-
版本?也许编译器将 int 数组对齐到 16,因此它可以为它们生成对齐的 SSE 加载指令(但这对您的情况没有用,因为数组大小为 1)。
标签: c++ arrays pointers stack mingw