【问题标题】:What options do I have if I want to realloc memory and use 32 (or 64) byte alignment?如果我想重新分配内存并使用 32(或 64)字节对齐,我有哪些选择?
【发布时间】:2020-08-18 04:00:09
【问题描述】:

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

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

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

【问题讨论】:

标签: c++ memory


【解决方案1】:

std::align 可用于获取指向内存对齐区域的指针。您可以通过将指针与std::align 的结果进行比较来检查重新分配的区域是否仍然对齐。如果没有,memmove() 可能是必要的。

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


一种可能的实现策略可以是从特定内存池中检索内存的分配器。内存池只返回由std::align 对齐的内存或者可以管理std::aligned_storage 的块。这种方法还为您提供了内存池的所有优势,例如缓存局部性、无内存碎片以及可能更快的分配算法(取决于您的池实现和malloc 的实现)。

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2016-12-19
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多