将 3x4 矩阵指针与 16 对齐

Aligning a 3x4 matrix pointer to 16

本文关键字:对齐 指针 3x4      更新时间:2023-10-16

我有一个返回未对齐的 3x4 矩阵指针的函数。我希望能够将此指针与 16 对齐,然后将其传递给另一个函数。有什么办法可以做到这一点吗?

using matrix3x4 = float[ 3 ][ 4 ];
matrix3x4 *UnalignedPointer();
void AlignedPointer( matrix3x4 *aligned );
void Function() {
   matrix3x4 *arr = UnalignedPointer();
   // allign arr
   AlignedPointer( arr );
}

"重新对齐"类型绝对不容易,您可能必须重新分配内存,这会变得"昂贵"(并且有内存泄漏的风险,因为您还必须有一种机制来释放额外分配的内存以及原始内存(。

在 gcc 和 clang 中,您可以通过添加 __attribute__((aligned(16)) 来对齐类型,并且 MS 编译器支持 __declspec(align(16)) ,这意味着编译器将尽最大努力使类型首先对齐到 16 个字节。鉴于您的类型的最小大小为 3 x 4 x 4 字节 = 48 字节,这已经与 16 对齐,因此不太可能为您的整体占用空间增加太多内存。