我不知道我输错了'far'而不是'var'。我注意到关键字是粗体,这让我觉得它是Delphi语法的一部分。
有没有人知道“远”关键字?
答案 0 :(得分:12)
在32位版本的Delphi(Delphi 2及更高版本)中,没有任何意义。它用于16位编程以指示段位置。
它仍然使用该语言,以便与旧的遗留代码向后兼容。
从旧的Delphi 7帮助文件,主题“调用约定”:
“near,far和export指令指的是16位Windows编程中的调用约定。它们对32位应用程序没有影响,只是为了向后兼容而维护。”
答案 1 :(得分:9)
正如Ken White解释的那样,它仅用于16位应用程序。
由于16位指针只能寻址64 kb的内存,因此内存段用于访问更多内存。处理器有四个段寄存器,因此它可以同时具有四个活动段,一个代码段(cs),一个数据段(ds),一个堆栈段(ss)和一个额外的段。每个段为64 kb,但它们可以寻址相同的内存区域或方重叠。
近指针是同一段内的16位指针。它用作指向同一模块中数据或代码的指针。
远指针是一个16 + 16位指针,由16位段偏移和近指针组成。它用作指向不同模块中的数据或代码的指针。当您使用far指针调用过程时,段部分将放入cs和ds寄存器(IIRC)以访问该模块中的代码和数据。
段+指针对的物理地址计算为段* 16 +指针。这意味着16位程序可以处理1024 kB的内存。为了访问更多内存,使用了扩展和扩展内存的两种技术。 (在某种程度上也是高内存技术,其中地址不会在1 MB的屏障处包裹,但使用段偏移FFFF可以直接访问65520字节的扩展内存。)
答案 2 :(得分:1)
它可能会回来。我听到一种趋势的杂音,看着所有这些x64 CPU浮动的PAE。所以你的程序可以解决正常的2或3 Gig内存限制(操作系统启动设置依赖),但是有一个48位指针可以解决另一个4 gig。当然你必须安装很多便宜的DDR3物理内存。说24千兆。没有太多需要超过3 gig核心的程序。交换文件管理意味着并非所有正在运行的程序都在内存中。但也许是要扫描或处理的数据。
所以远可能会返回48位指针,以帮助从32位到64位的转换。