gpt4 book ai didi

条件堆栈分配

转载 作者:行者123 更新时间:2023-12-02 06:01:40 25 4
gpt4 key购买 nike

我有一个方法将指针 T 指向一个有效的内存块。由于已知常量 some_defined 常量很小,因此不会导致堆栈溢出,因此该方法中的以下做法是否明智?

if (T)
{
p = T;
q = T + k;
}
else
{
unsigned long long TT[2 * some_defined constant];
p = TT;
q = TT + k;
}

<code using p and q>

我永远不会考虑这样做,除非我知道该方法正在被并发调用;它被调用了五次,每次调用都在一个单独的线程上。进行此类调用的方法使用 OMP 循环。如果调用 OMP 循环的调用方法是为了满足 T 中所需和预分配的额外内存,则需要从调用者请求分配 10 * some_defined 常量字,如果在 OMP 循环中调用的方法分配 2 * some_defined constant 那么这将工作得很好。最好将此设置为有条件的,这样当可能出现堆栈溢出的风险时,可以在堆上分配 10 * some_defined 常量字后调用 top 方法。

最佳答案

TT 数组的生命周期只会延长到离开声明它的 block (else block )。因此,当您的代码在 else block 末尾被访问时,将导致未定义的行为。

如果将 TT 的声明移动到 if 语句之上,代码将是正确的。但是当然,即使不需要它,它也会被分配到堆栈上。

正如用户自己在评论中指出的那样,您可以根据是否需要使用 C99 可变长度数组来更改 TT 的大小:

unsigned long long TT[is_needed ? some_size : 1];

关于条件堆栈分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21754557/

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