我正在使用SIMD指令(SSE和AVX)执行多个操作。据我所知,SSE指令最适合16字节对齐的内存,而AVX指令最适合32字节对齐的内存。
为了最大限度地发挥SSE和AVX的优势,总是分配32字节边界对齐的内存是否安全?
是否存在32字节对齐的内存不同时也是16字节对齐的情况?
在哪些情况下,32字节对齐的内存不会同时也是16字节对齐的?
对齐只意味着地址是32的倍数。任何32的倍数也都是16的倍数。
“对齐”一词的第一个谷歌搜索结果是维基百科,您可以访问https://en.wikipedia.org/wiki/Data_structure_alignment#Definitions查看详细解释。
alignas(16)
或C11的_Alignas(16)
,这样您就不必依赖特定的编译器行为。 - Peter Cordes