gpt4 book ai didi

c - 堆栈溢出发生前剩余堆栈的大小

转载 作者:IT王子 更新时间:2023-10-29 00:31:16 25 4
gpt4 key购买 nike

在 Linux 上,使用 C,假设我有一个动态确定的 n 命名我必须存储在数组中的元素数量 (int my_array[n]) 只是在很短的时间内,比如一个函数调用,被调用函数只使用很少的内存(大约一百字节)。

大部分 n 很少,大约十分之一。但有时 n 可能很大,多达 1000 或 1'000'000。

如何计算,我的堆栈是否可以容纳 n*o + p 个字节而不溢出?

基本上:我的堆栈中还剩下多少字节?

最佳答案

的确,checking available stack问题给出了很好的答案。

但更务实的答案是:不要在调用堆栈上分配大数据

在您的情况下,您可以以不同方式处理 n<100 时的情况(然后在堆栈上分配,也许通过 alloca 是有道理的)和 n>=100 的情况(然后,使用 malloc (或 calloc )在堆上分配并且不要忘记 free 它)。做阈值100一个#define -d 常量。

call stack 上的典型调用框架在当前的笔记本电脑或台式机上,最多应该是几千字节(如果你有递归或线程,最好更少)。总堆栈空间通常最多为几兆字节(有时更少:在内核内部,每个堆栈通常为 4 KB!)。

关于c - 堆栈溢出发生前剩余堆栈的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8365533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com