将 3x4 矩阵指针与 16 对齐
Aligning a 3x4 matrix pointer to 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 对齐,因此不太可能为您的整体占用空间增加太多内存。
相关文章:
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- C++指针算术:对齐异常 (0x801)
- 指针对齐的正确方法
- 投射空指针以检查内存对齐情况
- C++17 中函数参数的指针对齐方式
- 将 3x4 矩阵指针与 16 对齐
- 对齐指针的未对准访问
- 如何向编译器指示指针参数已对齐?
- MMAP是否返回对齐的指针值
- 如何检查指针是否指向正确对齐的内存位置
- 对齐方式与指针中尾随零的数量有何关系
- 是否可以强制对C中的指针参数进行内存对齐
- _declSpec(Align(16))不将指针与16个字节对齐
- 如何迫使新操作员返回的指针将是32字节对齐
- 对齐C++指针位置的目的是什么
- 对齐指针
- 对齐指针以具有功能性 -> 运算符?C++
- 为什么我得到一个未对齐指针的警告,而不是一个引用
- 对齐指针操作