现在假设有这么一段代码:
void main()
{
int a = 100;
cout<<&a<<endl;
}
如果编译执行,先打印地址,假设是0x12345678。那么,这个地址,是逻辑地址呢,还是线性地址,亦或是物理地址呢?
首先我们需要引入一些别的东西。在英特尔的X86体系下,从他的发展可以看出他是从实模式向保护模式发展的,内存管理是从分段是管理往分页式管理的。既然是一个体系,后来的东西必须要能够兼容前面的东西。就像word2007一定能够兼容word2003一样。在i386之前的操作系统里,存在着段寄存器比如CS(代码段寄存器),DS(数据段寄存器),SS(堆栈段寄存器)。IP(偏移量)等。
来说说实模式:
实模式依然是段式管理,存在着段寄存器和IP寄存器。32位系统的地址总线是20条,但是段寄存器是从X86体系下继承过来的,那么段寄存器的大小是16位,规定每个内存段的起始地址必须是16的倍数,那么一个段的物理内存为2^16=64K。但是