kay*_*kay 7 c linux stack stack-size
在Linux上,使用C,假设我有一个动态确定的n命名,我必须在一个数组(int my_array[n])中存储的元素数量只是一段时间,比如一个函数调用,其中被调用的函数只使用很少的内存(一些百字节).
大部分n是小的,十分之一.但有时n可能很大,高达1000或1000'000.
我如何计算我的堆栈是否可以保存n*o + p字节而不会溢出?
基本上:我的堆栈上剩下多少字节?
事实上,检查可用堆栈问题给出了很好的答案。
但更务实的答案是:不要在调用堆栈上分配大数据。
在您的情况下,您可以以不同的方式处理以下情况n<100(然后在堆栈上分配,也许通过alloca,有意义)和以下情况(然后,使用(或)n>=100在堆上分配,不要忘记它)。使阈值 a -d 恒定。malloccallocfree100#define
在当前的笔记本电脑或台式机上,调用堆栈上的典型调用帧最多应为几千字节(如果有递归或线程,则最好更少)。总堆栈空间通常最多为几兆字节(有时要少得多:在内核内部,每个堆栈通常为 4KB!)。