Dar*_*bik 36 c c++ sizeof alignment
这似乎是合理的假设,T并且const T将两种类型的将是相同尺寸并具有相同的排列,但想一些实际的系统后,似乎他们可能是不同的.
让我解释:
假设您的系统有两种类型的内存:RAM和Flash(只读).RAM是8位可寻址的,而闪存只有16位可寻址.假设这是T:
struct T
{
uint8_t x;
uint16_t y;
};
Run Code Online (Sandbox Code Playgroud)
在字节可寻址RAM中,这个结构长度为3个字节....但是在双字节可寻址Flash(const变量所在的位置)中,由于对齐问题,这个结构必须至少有4个字节长.
所以这是我的问题:
c和c ++标准是否保证了大小和对齐const以及非const类型?
Sam*_*hik 33
第3.9.3节:
类型的cv限定或cv非限定版本是不同类型; 但是,它们应具有相同的表示和对齐要求(3.11).53
"cv-qualified"在这里指的是const和volatile.所以答案是肯定的.
const并且volatile只指定访问指定对象的限制/属性.它们不被认为是基本类型本身的一部分; 因此它们不会影响类型的属性.