c – 是否可以确定堆栈上有多少空间?

前端之家收集整理的这篇文章主要介绍了c – 是否可以确定堆栈上有多少空间?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个小型的软件引擎,并且我想要使用大量的堆叠来快速迭代.但是,对我来说,这可能是一个坏主意,因为堆栈不像堆那么大的内存存储.但是我受到堆栈速度的吸引,缺乏动态分配编码实践.

有没有办法找出我可以在给定的平台上推多少堆栈?我主要看移动设备,但问题可能会出现在任何平台上.

解决方法

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特定的调用.

猜你在找的C&C++相关文章