最近看嵌入式文件系统TFFS的源码,看到far关键字,基础不好,惊呆了。。。
/*Specify here which pointers may be far, if any.
*Far pointers are usually relevant only to 80x86 architectures.
*/
下面是网上盗来的说法,大致上了解一下:
far即为远地址,16位模式下(如80x86系列)内存是分段寻址的; (一个段就是 2^16,即64k)
指定void far fun1();的话,是说函数fun1的入口点在其它段中,调用时将用到段地址;
如果指定为near的话,入口点将在本段之内,调用时值使用段内的偏移地址。
32位中采用线性的平坦寻址方式,这一概念已被抛弃了,内存中地址统一为32位宽,大体
说来就是这样,细节参见相关资料
near、far、huge关键字的真正含义是什么?
这三个关键字只能用于修饰函数、全局变量和指针变量,对于非指针类型的局部变量,这些关键字没有实际意义。
这些关键字用于修饰函数时,huge的含义与far相同,用于指明该函数的调用方式为far调用方式,即调用时需要一个段值和一个段偏移组成的32bits调用地址,使用far call进行跳转,跳转前先压栈保存当前CS:IP。near修饰函数时,用于指明该函数的调用方式为near调用方式,调用时只需要一个16bits的近地址,即当前CS的段内偏移。
当这三个关键字用于修饰指针时,nea