【发布时间】:2013-01-25 12:45:44
【问题描述】:
我想要做的是不初始化一个与给定边界对齐的指针,相反,它就像一些可以转换/复制指针(及其指向的内容)的函数的物理地址来回对齐内存地址,如以下代码中的alignedPtr():
void func(double * x, int len)
{
//Change x's physical address to an aligned boundary and shift its data accordingly.
alignedPtr(x, len);
//do something...
};
【问题讨论】:
-
只有当
x指向比len大到足以让你移动东西的空间时,这才有效。 -
如果空间是大于 x 的元素,它应该可以工作(不考虑对齐的空间要求)。
-
我很确定如果数据在虚拟内存中对齐,它也会在物理内存中对齐(至少最多 32 字节?)。另外,为什么要将它移回原来的位置?
-
我认为没有一件事可以直接支持这一点,不。如果您愿意,可以将
alignof或alignas与std::copy结合使用。 -
我需要更多才能为 MIC 等某些计算设备提供最佳 SIMD 性能。