gpt4 book ai didi

c++ - 如何找出 Linux 上 C++ 程序的内存堆栈的最大大小? (gnu 编译器)

转载 作者:太空狗 更新时间:2023-10-29 23:38:31 26 4
gpt4 key购买 nike

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

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

谢谢!

最佳答案

Who controls the default maximum stack size; OS or compiler?

通常是编译器。操作系统/硬件确实在一定程度上限制了它。在 linux IIRC 上默认为 8MB。想想 Linux 上的 ulimit -s(更改堆栈大小)。

Is the default maximum scaled according to total memory? (ie a machine with 2gb memory would have larger default size than a machine with only 512mb) For this example both machines are same os/compiler setup, just different amounts of system RAM.

没有。直到并且除非您自己动手。您可以通过编译器开关更改堆栈大小。

ld --stack=<STACK_SIZE>

gcc -Wl,--stack=<STACK_SIZE>

The C++ Standard's take on the issue of stacks and heaps:

该标准基于抽象机器,并不真正关注硬件、堆栈或堆。它确实谈到了分配的商店和免费的商店。免费商店是您调用新人(大多数情况下)时会去的地方。 FWIW,在涉及对象分配时,一个实现只能有一个内存区域伪装成堆栈和堆。

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

希望这对您有所帮助。

关于c++ - 如何找出 Linux 上 C++ 程序的内存堆栈的最大大小? (gnu 编译器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/682444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com