我正在构建一个小型的软件引擎,并且我想要使用大量的堆叠来快速迭代.但是,对我来说,这可能是一个坏主意,因为堆栈不像堆那么大的内存存储.但是我受到堆栈速度的吸引,缺乏动态分配编码实践.
有没有办法找出我可以在给定的平台上推多少堆栈?我主要看移动设备,但问题可能会出现在任何平台上.
解决方法
On * nix,使用
getrlimit
:
RLIMIT_STACK The maximum size of the process stack,in bytes. Upon reaching this limit,a SIGSEGV signal is generated. To handle this signal,a process must employ an alternate signal stack (sigaltstack(2)).
在Windows上,使用VirtualQuery
:
For the first call,pass it the address of any value on the stack to
get the base address and size,in bytes,of the committed stack space.
On an x86 machine where the stack grows downwards,subtract the size
from the base address and VirtualQuery again: this will give you the
size of the space reserved for the stack (assuming you’re not
precisely on the limit of stack size at the time). Summing the two
naturally gives you the total stack size.
没有独立于平台的方法,因为堆栈大小在逻辑上落在了实现和主机系统上 – 在嵌入式mini-SOC上,与128GB RAM服务器相比,分发资源较少.然而,您可以影响所有操作系统上的特定线程的堆栈大小以及API特定的调用.