C语言里的near和far是什么意思?-CSDN论坛-CSDN.NET-中国最大的IT技术社区
http://bbs.csdn.net/topics/390275885
32位系统中已经没有用了,16位才有用。
近指针、远指针,这是16位CPU造就的怪胎。32位以上的CPU没这玩意。
16位CPU(主要指80386和80486)内部数据总线为16位,地址总线为24位。这就意味着一个字(16bit)存不下一个地址,要用到两个字。习惯把高位字称为段地址,低位字称为偏移地址。
程序运行时,OS会给程序分配几个内存段供程序使用,主要的有代码段(CS)、数据段(DS)、堆栈段(SS)。根据不同的编译模式这几个段可能重合。
far 远跳转/指针,它会带一个段前缀。near 没有段前缀。
当指针指向的地址与数据段的段地址相同(即处于数据段内),这时可以不记录段地址而仅记录偏移地址(只需16bit)。这种指针称为近指针(near指针)。在16位CPU下,缺省的指针类型。
当指针指向的地址与数据段的段地址不同(即处于数据段外),这里不仅要记录偏移地址还要记录段地址(共需32bit)。这种指针称为远指针(far指针)。