预备知识:
这与CPU寻址有关。在16位机器下,地址线为20位。但CPU处理能力只有16位。于是访问内存的方案是分段。即基址(段)+偏址是逻辑地址,从中可计算物理地址。基址(段)有16位,偏址也16位,寻址时将基址左移4位加偏址既可寻址。注意,段只有16位。其大小为2的16次方。即64K。
解释:
当你访问地址(指针)在一个段内,这是这个指针是近指针。当你访问地址(指针)不在一个段内,这是这个指针是远指针。因为它跨段寻址。所以“远”。
对于32为的CPU,32位的操作系统,其地址线为32,寻址能力达到4Gb,远远大于物理地址,它的一个段为4Gb。实际上,这时谈论段已没有意义。所以在32位的操作系统上无近远指针之说。之所以存在,是因为兼容。
在32位win32系统下,已经没有far/near指针区别,都一样。
在8086实模式(dos)下,和286的保护模式下(windows 3.x),地址由两部分组成,一部分是段地址,一个是偏移地址(16位);段地址存储在一个特殊的寄存器中,程序可以提供段地址,也可以不提供,如果不提供段地址访问内存,则使用当前寄存器中的段地址;这样,如果不用段地址访问内存,只需要提供16未的偏移地址,在c中为near指针,如果提供段地址,则是far指针。