我很好奇如何找出特定编译器/ os组合的最大堆栈大小.我正在使用Ubuntu/GNU编译器.我还有几个问题:
谁控制默认的最大堆栈大小; OS还是编译器?
默认最大值是否根据总内存进行缩放?(即具有2GB内存的机器将具有比仅具有512mb的机器更大的默认大小)对于该示例,两个机器是相同的操作系统/编译器设置,只是不同数量的系统RAM.
谢谢!
谁控制默认的最大堆栈大小; OS还是编译器?
通常是编译器.OS /硬件确实在一定程度上限制了它.linux IIRC上默认为8MB.想想ulimit -s
Linux(改变堆栈大小).
默认最大值是否根据总内存进行缩放?(即具有2GB内存的机器将具有比仅具有512mb的机器更大的默认大小)对于该示例,两个机器是相同的操作系统/编译器设置,只是不同数量的系统RAM.
不会.除非你自己做,否则你可以通过编译器开关改变堆栈大小.
ld --stack=
要么
gcc -Wl,--stack=
C++标准涉及堆栈和堆的问题:
该标准基于抽象机器,并不真正涉及硬件或堆栈或堆.它确实讨论了分配的商店和免费商店.如果你打电话给新人(大部分),免费商店就是你的所在地.FWIW,在对象分配方面,一个实现只能有一个伪装成堆栈和堆的内存区域.
因此,您的问题归结为一个特定于实现的问题而不是语言问题.
希望这可以帮助.