似乎记得C++中的静态数组只能从const表达式初始化,但如果你写:
#include <iostream>
int main() {
int n;
std::cin >> n;
int a[n];
std::cout << sizeof(a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序成功编译(gcc C++ 17)并打印n*sizeof(int).但为什么会这样呢?
在函数的开头有这种结构:
0x7ffff7e47a10: test $0xf,%spl
0x7ffff7e47a14: je 0x7ffff7e47a1b
0x7ffff7e47a1a: int3
Run Code Online (Sandbox Code Playgroud)
什么是标志的目的0xf的spl,如果它不这样做中断?就像"堆栈一切都好"?