使用C99 VLA是个好主意吗?与malloc/free相比,何时使用VLA是否合适?(因为VLA可能会爆炸堆叠?)
书籍为什么说"编译器为内存中的变量分配空间".这不是可执行文件吗?我的意思是,例如,如果我写下面的程序,
#include <iostream>
using namespace std;
int main()
{
int foo = 0;
cout<<foo;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行program.exe,这个可执行文件将自己命令为变量foo分配一些空间,并编译它,并获得一个可执行文件(让它成为program.exe).不是吗?请解释为什么书籍继续说,"编译器会这样做......这样做"而实际上,编译后的可执行文件就是这样做的.
在这个问题中添加另一个相关问题,为什么sizeof称为编译时运算符?它不是一个实际的运行时运算符吗?
#include <iostream>
using namespace std;
int main(){
int n=10;
int a[n];
for (int i=0; i<n; i++) {
a[i]=i+1;
cout<<a[i]<<endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在Mac下的Xcode4中运行良好
如书中所说,这应该是错的,为什么?
好糊涂〜