在Linux上,使用C,假设我有一个动态确定的n
命名我必须存储在一个数组(int my_array[n]
)中的元素数量,只是在短时间内,例如,一个函数调用,其中被调用函数仅使用很少的内存(几百个字节)。
大多数n
很少,只有十分之一。但有时n
可能很大,可能会达到1000或1000'000。
如何计算我的堆栈是否可以保留n*o + p
个字节而不会溢出?
基本上:我的堆栈上剩下多少字节?
答案 0 :(得分:4)
确实,checking available stack问题给出了很好的答案。
但更实用的答案是:不要在调用堆栈上分配大数据。
在你的情况下,你可以处理n<100
(然后在堆栈上分配,或许通过alloca有意义)和n>=100
时的情况(当时,使用malloc
(或calloc
)在堆上进行分配,不要忘记free
它。使阈值100
成为#define
- d不变。
call stack上的典型呼叫帧应该在当前的笔记本电脑或台式机上最多几千字节(如果你有递归或线程,最好少一些)。总堆栈空间通常最多只有几兆字节(有时甚至更少:在内核中,堆栈通常每个都是4K字节!)。
答案 1 :(得分:4)
如果您没有使用线程,或者您知道您的代码在主堆栈上执行,那么
man getrlimit
)如果您正在使用线程并且可以在除main之外的线程上执行,请参阅man pthread_getattr_np