局部变量过大引发堆栈溢出问题?

您所在的位置:网站首页 堆栈溢出的解决办法 局部变量过大引发堆栈溢出问题?

局部变量过大引发堆栈溢出问题?

2023-03-26 04:28| 来源: 网络整理| 查看: 265

据说每个过程都有8 mb的堆栈.该堆栈将用于存储局部变量.所以如果我的数组大小超过堆栈,它必须溢出?

int main() { int arr[88388608]; int arr1[88388608]; int arr2[88388608]; while(1); return 0; }

但我无法得到结果!

1> Serge Balles..:

欢迎来到优化编译器的世界!

由于as-if规则,编译器只需要构建与原始代码具有相同可观察结果的东西.所以编译器可以自由地:

删除未使用的数组

删除空循环

存储来自堆栈外部的动态数组 - 因为main是一个特殊的函数,只能被环境调用一次

如果你想观察堆栈溢出(坏的,不是我们不错的网站:-)),你应该:

使用一些代码来填充数组

编译时删除所有优化并优先在调试模式下编译,告诉编译器尽可能准确地完成我写的内容

编译为时,以下代码将SIGSEGV与CLang 3.4.1配合使用 cc -g foo.c -o foo

#include #define SIZE 88388608 void fill(int *arr, size_t size, int val) { for (size_t i=0; i

甚至这个代码在编译为-O2优化级别时工作正常...编译器现在对我来说太聪明了,我不够勇敢地彻底查看汇编代码,这将是了解实际执行内容的唯一真正方法!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3