Delphi中"far"关键字的用途是什么?

Iva*_*nov 5 delphi

我不知道我输错了'far'而不是'var'.我注意到关键字是粗体,这让我觉得它是Delphi语法的一部分.

有没有人知道"远"关键字?

Ken*_*ite 12

在32位版本的Delphi(Delphi 2及更高版本)中,远没有任何意义.它用于16位编程以指示段位置.

它仍然使用该语言,以便与非常旧的遗留代码向后兼容.

从旧的Delphi 7帮助文件,主题"调用约定":

"near,far和export的指令指的是16位Windows编程中的调用约定.它们对32位应用程序没有影响,只是为了向后兼容而维护."


Guf*_*ffa 9

正如Ken White解释的那样,它仅用于16位应用程序.

由于16位指针只能寻址64 kb的内存,因此内存段用于访问更多内存.处理器具有四个段寄存器,因此它可以同时具有四个活动段,一个代码段(cs),一个数据段(ds),一个堆栈段(ss)和一个额外的段.每个段为64 kb,但它们可以寻址相同的内存区域或方重叠.

近指针是相同段内的16位的指针.它用作指向同一模块中数据或代码的指针.

远指针是16 + 16位的指针包括16位段偏移和近指针.它用作指向不同模块中的数据或代码的指针.当您使用远指针调用过程时,段部分将放入cs和ds寄存器(IIRC)以访问该模块中的代码和数据.

段+指针对的物理地址计算为段*16 +指针.这意味着16位程序可以处理1024 kB的内存.为了访问更多内存,使用了扩展和扩展内存的两种技术.(在某种程度上也是高内存技术,其中地址不会在1 MB的屏障处包裹,但使用段偏移FFFF可以直接访问65520字节的扩展内存.)