读取和写入结构的填充位
reading and writing in the padding bits of a structure
我有以下32位对齐结构和必要的填充,以确保i32
数据成员的32位对齐:
struct
{
std::uint8_t i8;
std::uint32_t i32;
} x, y = {0};
填充位中的写入是否具有定义良好的行为?例如,在代码中:
reinterpret_cast<std::uint32_t&>(x) = 256u;
填充部分是否总是写入和读取为1?
另一个问题:
对于y
,填充是否总是初始化为0?
我理解为C++[dcl.init]状态:
为零初始化T类型的对象或引用意味着:如果T是非并集类类型、每个非静态数据成员和每个基类子对象初始化为零,填充初始化为零位
然而,我在微软编译器(vc++v120)中没有看到这种行为,例如:
reinterpret_cast<std::uint32_t&>(y) == 0u
不评估为CCD_ 3。这可能是一个缺失的功能,或者我误解了标准中的短语。
我不是填充方面的专家,但我认为不可能保证任何填充,至少在没有特殊且可能特定于实现的选项的情况下是不可能的。
对于除了转换回原始指针之外的任何事情,都不定义使用repret_cast的行为。interpret_cast表示您在代码中做了一些不可靠的事情。
这个问题讨论填充初始化为什么结构的零初始化是否保证擦除填充区域?
相关文章:
- 使用结构成员指针在C++中填充结构
- C++:使用缓冲区中的数据填充结构
- 用二进制文件填充结构
- 如何使用文件填充结构(下面附有的代码)?
- 使用 snprintf 填充结构
- 使用来自函数的指针填充结构数组
- 使用循环填充结构
- C 从文件中填充结构数组
- C 如何从UCHAR数组中填充结构的位字段
- 如何有效地用向量填充结构
- 避免在C 中填充结构
- 如何填充结构的向量
- C/C++ 从字符缓冲区读取以填充结构
- 从 std::vector<无符号字符中的数据填充结构>
- 从矢量中擦除元素,并向量填充结构
- 结构错误的构造函数(调用类的构造函数 denconstructor,用于填充结构)
- 有没有办法用较短的代码来填充结构
- 填充结构,同时查找min_element,C++
- 在函数中填充结构映射的最好方法是什么?
- 当编译器决定填充结构时