使用了什么形式的内存地址空间?
今天,大型扁平虚拟地址空间很常见.从历史上看,已经使用了更复杂的地址空间,例如一对基地址和偏移量,一对段号和一个偏移量,一个字地址加上一个字节或其他子对象的索引,依此类推.
不时,各种答案和评论声称C/C++指针本质上是整数.这是一个不正确的C/C++模型,因为各种地址空间无疑是一些关于指针操作的C规则的原因.例如,不在数组之外定义指针算法简化了对基本和偏移模型中指针的支持.指针转换的限制简化了对地址加额外数据模型的支持.
这种反复出现的断言激发了这个问题.我正在寻找有关各种地址空间的信息,以说明C/C++指针不一定是一个简单的整数,并且考虑到要支持的各种机器,C/C++对指针操作的限制是明智的.
有用的信息可能包括:
这是一个广泛的问题,所以我愿意接受有关管理它的建议.我很高兴看到一个通用包容性答案的协作编辑.然而,这可能无法授予应得的声誉.我建议投票多个有用的贡献.
我刚问了这个问题,它让我思考是否有任何理由
1)为什么要使用十六进制或八进制而不是十进制来分配一个int变量
2)不同的分配方式有什么区别
int a=0x28ff1c; // hexideciaml
int a=10; //decimal (the most commonly used way)
int a=012177434; // octal
Run Code Online (Sandbox Code Playgroud)