【发布时间】:2011-08-07 16:18:48
【问题描述】:
Windows 上的posix_memalign 和_aligned_malloc 允许动态分配对齐的内存块。 C ++ 11中有类似的东西吗?据我所知,alignas 关键字仅适用于静态分配的对象。
【问题讨论】:
-
对齐是指顺序吗?如果是,则使用
new运算符和[]组合分配的内存是动态对齐的。 -
@Blindy:我不会说“相反”。更像“正交”?
-
对齐是指地址模指定值为零。例如调用 posix_memalign(&ptr, 32, 1000) 保证在 ptr 中返回的地址可以被 32 整除。我需要它来在缓存行边界分配对象以避免错误共享。
-
恐怕没有标准的 C++ 分配器支持任意对齐。您必须使用特定于平台的分配 API。但是,如果您将它与我给您的构造函数/析构函数的任意内存示例结合使用,这应该不是什么大问题。
-
C++17 将添加为动态分配的对象指定“自定义”/过度对齐的功能:open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3396.htm 最佳答案中提到的这个提议已被即将发布的标准接受。跨度>