c++ - 如果我想重新分配内存并使用 32(或 64)字节对齐,我有哪些选择?
问题描述
我正在写一些 SIMD 代码。如果我决定以支持 512 位 simd 指令的 CPU 为目标,我需要将我的数组对齐到 32 字节,并可以选择升级到 64 字节。
据我所知,realloc 似乎没有对对齐做出任何承诺。似乎 malloc 和 realloc 只能保证 8bytes/64bits?
如果我想重新分配一块内存,我自己的选择是什么?
解决方案
可以std::align
使用它来获取指向内存对齐区域的指针。您可以通过将指针与std::align
. 如果没有,amemmove()
可能是必要的。
还有std::aligned_storage
可能是固定(即编译时)长度的对齐分配的选项。
一种可能的实现策略可以是从特定内存池中检索内存的分配器。内存池仅返回std::align
由std::aligned_storage
. 这种方法还为您提供了内存池的所有优点,例如缓存局部性、没有内存碎片以及可能更快的分配算法(取决于您的池实现和malloc
)。
推荐阅读
- node.js - 如何在其他一些 js 文件中使用导出对象
- excel - 如何在不设置引用的情况下从另一个 Office 应用程序打开 Excel?
- reactjs - 无法在地图上渲染路径
- rest - 如何使用 Trello REST API 获取当前用户?
- django - get_context_data 破破 django listview
- python - python / geopandas中跨空间(或空间平滑)的密度
- java - 现有应用程序从 Cassandra DB 迁移到 Cosmos DB
- laravel - 如何将变量从控制器传递到邮件应用程序
- json - 如何在 Node Red 中创建灵活的 JSON 结构?
- octobercms - 查询中只有一张图片