for(int i=0; i<10;i++){
int j = i;
cout << &j << endl;
}
这将在每次迭代中输出相同的j地址。我还注意到了C中的相同行为,是不是应该是不同迭代的不同地址呢?
在python中打印不同的地址,无法在java中进行验证。
for i in range(10):
j = i
print(hex(id(j)))
系统上的c++ -v返回以下内容
Using built-in specs.
COLLECT_GCC=c++
COLLECT_LTO_WRAPPER=/usr/lib/g
考虑下面这个简单的代码: class X {
int i_;
public:
X();
};
void f() {
X x;
} f的栈帧是32字节长的,与GCC,这是不必要的长。返回地址和x只需要12个字节,根据Linux/x86_64ABI应该需要16字节对齐。使用Clang时,仅分配了16个字节。为什么GCC需要这么多堆栈空间? GCC组件: f():
sub rsp, 24
lea rdi, [rsp+12]
call X::X()
add rsp, 24
ret Clang组件: f():
push rax
m