【发布时间】:2018-04-03 09:18:39
【问题描述】:
_alloca() 的文档说here:
_alloca 例程返回一个指向已分配空间的 void 指针, 这保证被适当地对齐以存储任何类型的 对象。
但是,here 它说:
_alloca 需要 16 字节对齐,另外还需要使用帧指针。
所以似乎在第一个参考文献中,他们忘记了 32 字节对齐的 AVX/AVX2 类型,例如 __m256d。
让我感到困惑的另一件事是第一页说_alloca() 已弃用,而它建议改用一个可能从堆而不是堆栈分配内存的函数(这在我的多线程应用程序中是不可接受的) .
那么有人可以指出我是否有一些现代(也许是新的 C/C++ 标准?)方法来对齐堆栈内存分配?
澄清1:请不要提供要求数组大小为编译时常数的解决方案。我的函数根据运行时参数值分配可变数量的数组项。
【问题讨论】:
-
首先,确定您要询问的是 C 还是 C++,尽管
_alloca不是其中任何一个的一部分。 -
alloca在 16 字节上对齐分配。如果您需要另一个对齐 - 分配更多内存并对齐自己 -
std::aligned_storage能满足您的需求吗?您可以将对齐指定为第二个模板参数,它来自给定使用alignas的示例实现的堆栈。 en.cppreference.com/w/cpp/types/aligned_storage -
什么是
alignof(__m256d),为了那些没有你的平台扩展的人的利益? -
@KerrekSB,问题是:32 字节。
标签: c++ memory-management c++17 c11 alloca