gpt4 book ai didi

c - alloca 和线程安全有什么关系(如果有的话)?

转载 作者:行者123 更新时间:2023-11-30 16:22:25 25 4
gpt4 key购买 nike

一般理论问题。

我正在尝试从源代码构建一个库(FFTW,如果有人关心的话,但这真的不重要),我注意到有一个选项可以禁用 alloca

我知道使用 alloca 的危险,但我正在评估使用和不使用 alloca 的 FFTW 的性能。

alloca 是否存在已知的线程安全问题?当我在 FFTW 中使用一定数量的线程(这显然是在后台调用 alloca)时,我发现性能受到极大影响。如果重要的话,我坚持使用等于 2 的幂的线程数。

FFTW 是否有可能通过 alloca 共享线程本地堆栈上的对象?我只是想弄清楚为什么我看到特定数量的线程会出现如此极端的性能影响。但是,我并不完全理解 alloca 真正使用线程执行的操作背后的理论。

最佳答案

简短回答:It doesn'talloca() 保证是 MT 安全的。

<小时/>

更长的答案:alloca() 不是复杂的函数。根据规范,它返回指向可以自动释放的位置的指针。请注意,这不再是一个好的做法:

The alloca() function returns a pointer to the beginning of the allocated space. If the allocation causes stack overflow, program behaviour is undefined.

正如您所看到的,分配可能会导致堆栈溢出,因此通过提高 SP 来在堆栈上分配空间。线程共享堆,但不共享堆栈,因此多线程使用 alloca() 不会遇到麻烦。

更安全的方法是使用 VLA 而不是 alloca(),因为两者的作用相同,并且(正如我怀疑的那样),VLA 更快更轻。

关于c - alloca 和线程安全有什么关系(如果有的话)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54441834/

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