union { struct { float x,y,z,padding; } components; __m128 sse; } _data;
我的想法是通过x,z字段分配值,执行SSE2计算,并通过x,z读取结果.对于这是否合法,我有些疑惑.我的关注是对齐:MSDN表示__m128变量自动对齐到16字节的边界,我想知道我的联合是否可以打破这种行为.
这里有什么其他陷阱吗?
typedef union __declspec(intrin_type) _CRT_AliGN(16) __m128 { float m128_f32[4]; unsigned __int64 m128_u64[2]; __int8 m128_i8[16]; __int16 m128_i16[8]; __int32 m128_i32[4]; __int64 m128_i64[2]; unsigned __int8 m128_u8[16]; unsigned __int16 m128_u16[8]; unsigned __int32 m128_u32[4]; } __m128;
如你所见,那里有4个浮标.如果你想成为一个愚蠢的偏执狂,你可以定义所有相同的对齐专长,以确保没有什么会破坏.然而,据我所知,由于你在答案中提到了MSDN,所以你应该很好.如果你知道你有SSE兼容的东西,那么工会和直接访问它都应该有效.您也可以在directxmath标头附近,了解windows如何定义和争吵自己:他们还定义了一些宏,取决于编译时存在哪些instrinsics和功能.
编辑:正如R.MartinhoFernandes在评论中所说的那样,直接访问它可能不像在联盟中重新定义一样.
总结以上是内存溢出为你收集整理的c – 通过union合法访问__m128变量的字节?全部内容,希望文章能够帮你解决c – 通过union合法访问__m128变量的字节?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)