【发布时间】:2014-05-19 08:43:37
【问题描述】:
-
是唯一指针
array_ptr拥有的内存吗:auto array_ptr = std::make_unique<double[]>(size);对齐到
sizeof(double)alignof(double)边界(即标准是否需要正确对齐)? 数组的第一个元素是缓存行的第一个元素吗?
否则:在 C++14 中实现此目的的正确方法是什么?
动机(更新):我计划在数组上使用 SIMD 指令,因为缓存行是我所知道的每个单一架构上的基本内存单元,我宁愿正确分配内存,以便第一个元素数组位于缓存行的开头。请注意,只要元素正确对齐(与缓存行之间元素的位置无关),SIMD 指令就可以工作。但是,我不知道这是否有影响,但我可以猜到是的,确实有。此外,我想在内核中的原始内存上使用这些 SIMD 指令。这是内核的优化细节,所以我不想分配例如__int128 而不是 int。
【问题讨论】:
-
听起来你想要对齐的存储而不是对齐的类型。类型总是至少和它们的对齐一样大,这根本不是你想要的。也许试试
std::aligned_storage。 -
@KerrekSB 我猜对齐存储就是我所说的对齐内存的意思。很抱歉与 sizeof 与 alignof 混淆(我不知道 alignof)。