C++ 将3x4矩阵指针与16对齐

C++ 将3x4矩阵指针与16对齐,c++,pointers,C++,Pointers,我有一个函数,它返回一个未对齐的3x4矩阵指针。我希望能够将此指针与16对齐,然后将其传递给另一个函数。有没有办法做到这一点 using matrix3x4 = float[ 3 ][ 4 ]; matrix3x4 *UnalignedPointer(); void AlignedPointer( matrix3x4 *aligned ); void Function() { matrix3x4 *arr = UnalignedPointer(); // allign arr

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

using matrix3x4 = float[ 3 ][ 4 ];

matrix3x4 *UnalignedPointer();
void AlignedPointer( matrix3x4 *aligned );

void Function() {
   matrix3x4 *arr = UnalignedPointer();
   // allign arr
   AlignedPointer( arr );
}

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


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

对齐到16意味着什么?尝试执行与alignas等效的操作(16)在数据上分配更多空间并将开始与16对齐请详细说明是什么阻止您使用您提到的
alignas