将3x4矩阵指针与16

时间:2018-03-12 05:34:05

标签: c++ pointers

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

using matrix3x4 = float[ 3 ][ 4 ];

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

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

1 个答案:

答案 0 :(得分:0)

绝对不容易"重新调整"一个类型,你可能需要重新分配内存,这会花费很多钱。 (并且存在内存泄漏的风险,因为您还必须有一种机制来释放额外分配的内存以及原始内存。)

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