当前位置:  开发笔记 > 编程语言 > 正文

如何在linux上找到C++程序的最大内存堆栈大小?(gnu编译器)

如何解决《如何在linux上找到C++程序的最大内存堆栈大小?(gnu编译器)》经验,为你挑选了1个好方法。

我很好奇如何找出特定编译器/ os组合的最大堆栈大小.我正在使用Ubuntu/GNU编译器.我还有几个问题:

    谁控制默认的最大堆栈大小; OS还是编译器?

    默认最大值是否根据总内存进行缩放?(即具有2GB内存的机器将具有比仅具有512mb的机器更大的默认大小)对于该示例,两个机器是相同的操作系统/编译器设置,只是不同数量的系统RAM.

谢谢!



1> dirkgently..:

谁控制默认的最大堆栈大小; OS还是编译器?

通常是编译器.OS /硬件确实在一定程度上限制了它.linux IIRC上默认为8MB.想想ulimit -sLinux(改变堆栈大小).

默认最大值是否根据总内存进行缩放?(即具有2GB内存的机器将具有比仅具有512mb的机器更大的默认大小)对于该示例,两个机器是相同的操作系统/编译器设置,只是不同数量的系统RAM.

不会.除非你自己做,否则你可以通过编译器开关改变堆栈大小.

ld --stack=

要么

gcc -Wl,--stack=

C++标准涉及堆栈和堆的问题:

该标准基于抽象机器,并不真正涉及硬件或堆栈或堆.它确实讨论了分配的商店和免费商店.如果你打电话给新人(大部分),免费商店就是你的所在地.FWIW,在对象分配方面,一个实现只能有一个伪装成堆栈和堆的内存区域.

因此,您的问题归结为一个特定于实现的问题而不是语言问题.

希望这可以帮助.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有