问题描述
以下代码是否符合严格的别名规则(以及一般而言)?
const int size = 1024;
uint8_t* buffer = allocateBuffer(size);
float* float_pointer = reinterpret_cast<float*>(buffer);
std::fill(float_pointer,float_pointer + size / sizeof(float),1.5f);
据我了解,一般而言,SAR表示我们无法通过其他类型的指针访问(读取或写入)数据-除非我们使用字符类型的指针。
但是,在上面的代码中,我们使用非字符类型(float*
)的指针来读取或写入(可能是)字符类型(uint8_t
)的数据,我认为这是非法的。
我正确吗?
解决方法
但是,在上面的代码中,我们使用非字符类型(float *)的指针来读取或写入(可能是)字符类型(uint8_t)的数据,我认为这是非法的。
我正确吗?
是的
以下代码是否符合严格的别名规则(以及一般而言)?
否。
除指针别名外,另一个考虑因素是float
的对齐要求比uint8_t
的对齐要求更严格。怀疑uint8_t* allocateBuffer(arg)
是否返回满足float
对齐方式的指针。