C++栈的剩余大小能检测吗?

C++栈的剩余大小能检测吗?,第1张

是有限制,多个局部变量累加(分类型)穗薯确实也段雹会增加内存占用,虽然局部变量是自动释放的。如果超出设置大小,程序直接崩溃。

vc2005设置堆栈握族帆大小的方法:

project->property->configuration properties->linker->system下的stack reserve size 和 heap reserve size设置。有上限。

1)程序中有两个这样的char数组,算下来,一个char是一个字节,两个2048*2048的数组便是8MB的空间

2)而使用ulimit -a查看Linux系统中困脊设置的栈汪逗渗空间大小stack size,8192(单位KB),即8MB,,也可用ulimit -s可以只看栈空间大小。可见栈空间已经不够用了,在调用该函数的时候,在栈空间中为该函数开辟空间,因为已经开辟不出这么大的空间了,于是段错误了,程序目前尚未进入该函数,因为在装载该函数的时候挂掉了。所以即使给该函数第一行加输出信息,也输出不了。

3)使用ulimit -s 10240修改栈大小为10M,重新运行程序,程序正常运行无段错误

4)由此可证,的确是系统栈空间大小太小导致程序段错误,当然如果改成new malloc等方式在堆区申请空指丛间则不会段错误。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8281642.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存