c/c++进程中栈的最大值问题

发布于 2021-11-23 11:10:18 字数 486 浏览 961 评论 9

在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

风柔一江水 2021-11-29 08:54:54

同问?

画骨成沙 2021-11-29 08:54:16

改内核参数可以解决!

风柔一江水 2021-11-29 08:33:14

这个问题么意义~因为用到的都不是物理内存。

蓝颜夕 2021-11-29 08:31:07

10M的话会不会覆盖一些其他的存储区,此时应用程序其实已经在异常状态了,但是尚未表现出来?

后知后觉 2021-11-29 07:00:27

大于程序的堆栈区域,程序溢出!

如果动态分配空间或者是用vector的话不会出现此问题!

累赘 2021-11-29 02:49:51

ulimit -s xxx可临时改大小

至于为什么可以超出一部分..不知道~

各自安好 2021-11-28 07:56:13

引用来自#2楼“夜游神(Lunar)”的帖子

    这个问题要限制系统....   windows系统下无限制. 由exe文件指定. VC默认1M.

    不清楚linux. 默认的确是8M,  另外系统有 动态栈增长的 特性. 不知道是不是指这个? 10M 也许是因为系统实在无法让你的栈再增长了.(因为10M的位置刚好被其它线程使用了..) 如果临界是稳定的10M,那就实在猜不到了.  等待熟悉linux的高人吧.

终止放荡 2021-11-26 23:09:14

    这个问题要限制系统....   windows系统下无限制. 由exe文件指定. VC默认1M.

    不清楚linux. 默认的确是8M,  另外系统有 动态栈增长的 特性. 不知道是不是指这个? 10M 也许是因为系统实在无法让你的栈再增长了.(因为10M的位置刚好被其它线程使用了..) 如果临界是稳定的10M,那就实在猜不到了.  等待熟悉linux的高人吧.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文