OpenPower Manual | Vector Data Types表示避免手动加载元素和使用矢量强制转换:
在应用程序定义的地址访问向量的首选方法 是通过使用向量指针和C / C ++解引用运算符*。 与其他C / C ++数据类型类似,数组引用运算符[] 可以用来访问带有向量指针的矢量对象 通常定义从向量访问第n个向量元素 指针。使用矢量内置函数,如vec_xl和 不鼓励使用vec_xst,除了没有解除引用的语言 运营商可用。
vector char vca;
vector char vcb;
vector int via;
int a[4];
void *vp;
via = *(vector int *) &a[0];
vca = (vector char) via;
vcb = vca;
vca = *(vector char *)vp;
*(vector char *)&a[0] = vca;
我在测试技术的早期阶段,但看起来上面的代码编译。测试的编译器是GCC 4.0.1(旧PowerMac G5)和GCC 4.8.5(Power 730服务器)。
我的第一个问题是,该技术是否正确处理未对齐的字节数组?
我的第二个问题是,该技术是否会自动在小端系统上执行大端转换?
我的第三个问题是,我们应该在实践中使用这项技术吗?感觉这种技术应该产生不确定的行为或违反行为。
答案 0 :(得分:1)
我的第一个问题是,该技术是否正确处理未对齐的字节数组?
不,它不能正确处理未对齐的数组。通过屏蔽4个低位来将存储器地址和偏移量截断为有效地址。
我的第二个问题是,该技术是否会自动在小端系统上执行大端转换?
YES。
我的第三个问题是,我们应该在实践中使用这项技术吗?
不,不要使用它。