我有一个返回未对齐的3x4矩阵指针的函数。我希望能够将此指针与16对齐,然后将其传递给另一个函数。有没有办法做到这一点?
using matrix3x4 = float[ 3 ][ 4 ];
matrix3x4 *UnalignedPointer();
void AlignedPointer( matrix3x4 *aligned );
void Function() {
matrix3x4 *arr = UnalignedPointer();
// allign arr
AlignedPointer( arr );
}
答案 0 :(得分:0)
绝对不容易"重新调整"一个类型,你可能需要重新分配内存,这会花费很多钱。 (并且存在内存泄漏的风险,因为您还必须有一种机制来释放额外分配的内存以及原始内存。)
在gcc和clang中,您可以通过添加__attribute__((aligned(16))
来对齐类型,并且MS编译器支持__declspec(align(16))
,这意味着编译器最好将类型对齐到首先是16个字节。鉴于您的类型的最小大小为3 x 4 x 4字节= 48字节,已经与16对齐,因此不太可能在整体占用空间中添加MUCH内存。