似乎可以合理地假设T
和const T
是两种大小相同、对齐方式相同的类型,但在考虑一些实际系统后,它们可能是不同的。
让我解释一下:
假设您有一个具有两种类型内存的系统:RAM和Flash(只读)。RAM是8位可寻址的,而Flash仅是16位可寻址的。假设这是T
:
struct T
{
uint8_t x;
uint16_t y;
};
在字节寻址的RAM中,该结构体长度为3个字节...但在双字节寻址的Flash中(这是
const
变量所在的地方),由于对齐问题,该结构体至少需要4个字节长。所以我的问题是:
C和C++标准是否保证了
const
和非const
类型的大小和对齐方式?
const int
参数传递给函数调用,它将存在堆栈中,而不是闪存中。最终,我认为这样的系统违反了C内存模型,这是一种均匀的模型,因此它的行为将是编译器扩展。 - Cort AmmonT
都是4个字节长,并且指向T
的指针在其中有一个特殊的位,指示它是位于闪存还是RAM中。 - DarthRubikconst
数据存储在Flash中,作为一名顺从的C开发人员,我不关心它是如何存储的(尽管我知道)。只要我可以使用正常的C结构访问数据,我的代码就能按预期工作。 - pipe