far在c语言中作用,C语言中的far关键字

本文详细介绍了C语言中的far关键字,主要用于80x86架构的16位模式下,涉及内存分段寻址。far关键字用于表示远地址,适用于函数和全局变量,用于在不同段中寻址。在32位系统中,这个概念不再适用。文章还讨论了near和huge关键字的区别,以及它们在指针类型和函数调用中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看嵌入式文件系统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的段内偏移。

当这三个关键字用于修饰指针时,near型指针实质上为16bits的无符号整型数,该整数给出了所指向变量在当前数据段内的偏移地址,也就是说,在使用near型指针寻址时实际上是进行如下的寻址操作:[DS:指针变量值]。对于far型的指针变量,可以寻址1MB地址空间的任意一个地方,far型指针的实质是一个32bits的整型数,高16bits为段值,低16bits为段内偏移,Turbo C中在使用far型指针时,会先将高16bits放入ES寄存器中,然后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值