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

Rya*_*anY 2 c++ memory gnu

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

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

谢谢!

dir*_*tly 6

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

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

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

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

ld --stack=<STACK_SIZE>
Run Code Online (Sandbox Code Playgroud)

要么

gcc -Wl,--stack=<STACK_SIZE>
Run Code Online (Sandbox Code Playgroud)

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

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

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

希望这可以帮助.