c/c++进程中栈的最大值问题
在Linux下用ulimit -s查看max stack size为8192KB
而我用程序测试了一下,大概为10M,这是为什么呢
#include <stdio.h> int main(int argc,char *argv[]) { char a[10475760]; //略小于10M,运行通过 printf("%pn", a); return 0; }
#include <stdio.h> int main(int argc,char *argv[]) { char a[10485760]; //恰好为10M,出现段错误 printf("%pn", a); return 0; }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
同问?
改内核参数可以解决!
这个问题么意义~因为用到的都不是物理内存。
10M的话会不会覆盖一些其他的存储区,此时应用程序其实已经在异常状态了,但是尚未表现出来?
大于程序的堆栈区域,程序溢出!
如果动态分配空间或者是用vector的话不会出现此问题!
ulimit -s xxx可临时改大小
至于为什么可以超出一部分..不知道~
..
引用来自#2楼“夜游神(Lunar)”的帖子
这个问题要限制系统.... windows系统下无限制. 由exe文件指定. VC默认1M.
不清楚linux. 默认的确是8M, 另外系统有 动态栈增长的 特性. 不知道是不是指这个? 10M 也许是因为系统实在无法让你的栈再增长了.(因为10M的位置刚好被其它线程使用了..) 如果临界是稳定的10M,那就实在猜不到了. 等待熟悉linux的高人吧.
这个问题要限制系统.... windows系统下无限制. 由exe文件指定. VC默认1M.
不清楚linux. 默认的确是8M, 另外系统有 动态栈增长的 特性. 不知道是不是指这个? 10M 也许是因为系统实在无法让你的栈再增长了.(因为10M的位置刚好被其它线程使用了..) 如果临界是稳定的10M,那就实在猜不到了. 等待熟悉linux的高人吧.