首页 > 解决方案 > 如果我想重新分配内存并使用 32(或 64)字节对齐,我有哪些选择?

问题描述

我正在写一些 SIMD 代码。如果我决定以支持 512 位 simd 指令的 CPU 为目标,我需要将我的数组对齐到 32 字节,并可以选择升级到 64 字节。

据我所知,realloc 似乎没有对对齐做出任何承诺。似乎 malloc 和 realloc 只能保证 8bytes/64bits?

如果我想重新分配一块内存,我自己的选择是什么?

标签: c++memory

解决方案


可以std::align使用它来获取指向内存对齐区域的指针。您可以通过将指针与std::align. 如果没有,amemmove()可能是必要的。

还有std::aligned_storage可能是固定(即编译时)长度的对齐分配的选项。


一种可能的实现策略可以是从特定内存池中检索内存的分配器。内存池仅返回std::alignstd::aligned_storage. 这种方法还为您提供了内存池的所有优点,例如缓存局部性、没有内存碎片以及可能更快的分配算法(取决于您的池实现和malloc)。


推荐阅读