smi*_*ude 4 c++ stack-overflow stack
如果int m[1000000];在C/C++的main函数内部编写,它将在堆栈溢出时收到运行时错误.相反,如果你vector<int> m;在那里写,然后push_back 1000000元素,它将运行正常.
我很好奇为什么会这样.他们都是本地记忆,不是吗?提前致谢.
堆栈内存量有限,因为必须事先保留.但是,堆内存量通常会超出操作系统所施加的更高限制,但"几乎"达到虚拟地址空间的限制(32位机器为2GB,64位机器更多)机).
您可以增加保留堆栈空间的数量,通常作为链接器的设置.
小智 5
int m [1000000] - 它将在堆栈上分配1000000个int.因为堆栈是有限的,所以它将抛出堆栈溢出运行时错误.
矢量m; 然后push_back的1000000个元素正在工作,因为内部向量分配堆上的内存而不是堆栈上的内存.所以在你的应用程序堆栈中只存在vector对象,所以它不会抛出堆栈溢出运行时错误.