C - 将所有分配的双阵列对齐至32 bytes

C++ - align all allocated double arrays to 32bytes

本文关键字:对齐 阵列 bytes 分配      更新时间:2023-10-16

我有一个很大的代码,我想通过AVX指令优化某些操作。根据我的测试,改进应高达4倍。

但是,该代码与新操作员使用普通的旧数组(无std :: vector(。

double * tmp = new double[size];

问题是,对于AVX,我需要所有的双阵列对齐到32个bytes边界。解决方案是用aligned_alloc(或MSVC中的_aligned_malloc(替换所有new,并用足够的释放功能替换释放功能。问题是我必须仔细研究所有代码并找到所有new,希望不要忘记一个代码,将来每个人都不得不忘记使用Aligned Alocator。

还有其他方法吗?我曾经想过仅适用于doublenew运算符,但我不确定这是正确的方法,如果是这样,则如何正确/安全地执行此操作。

i无法用自己的对齐的静态器切换到std::vector,因为将数组作为输入参数的某些外部外部libs。

还有其他方法吗?是的,_mm_loadu_*_mm_storeu_*,其中u代表非对齐。