近和远指针

Alo*_*ave 35 c c++ pointers

我们的常用指针(我们通常使用的指针),近指针和远指针之间有什么区别?现在的C/C++系统中有近端指针和远指针的实际用法吗?任何需要使用这些特定指针而不是其他c,c ++语义的实际场景将非常有用.

And*_*rsK 50

近端和远端关键字源于英特尔以前的分段存储模型.近指针只能访问原本大约64Kb大小的内存块(称为段),而远指针可能超出该段中的段和偏移量.近指针比远指针快得多,因此在某些情况下它使用它们得到了回报.

如今用虚拟内存远近指针都没用.

编辑:对不起,如果我没有使用正确的条款,但这是我在当天回来工作时记住它的方式:-)

  • @sbi:它们很常见,是事实上的标准,ISO和ANSI被诅咒.感谢gawd,他们已经离开了,但是当它们出现时,x86世界中的每个有用的C和C++编译器(阅读:现存最常见和最重要的架构之一)都必须拥有它们.它们不符合ISO/ANSI标准并不会使它们变得不那么重要,或者在现实世界中没有那么"标准". (7认同)
  • @cHao:实际上,没有.在C和C++中,它们被称为__pointers,只有指针___.这只是一个处理器架构,需要为其量身定制的编译器引入非标准扩展. (6认同)
  • @cHao:我不同意.当时每个有用的编译器都有一个"巨大"的内存模型,如果你用它编译,那么`far`关键字是完全没必要的,你基本上只需编写一个合理的C代码并假装你有一半可用的线性内存. (5认同)
  • @R ..除非这样做会导致指针慢得多,因为(1)无论如何它们都是指针,无论你是否需要一个指针,(2)总会有一些调整来保持这种错觉一大块线性记忆.我个人认为,对于那些真正关心性能的人来说,"巨大的"记忆模型是最后一个度假胜地(当时,只是每个人).无论哪种方式,`far`关键字都存在,任何没有它的16位编译器都是'不合格'. (4认同)
  • @KeithThompson:我相信你们中有几个人.我记得曾经想过一个SPARC.但我也很确定世界上大多数人甚至不知道Sun存在直到Java发生.:) (4认同)
  • 如今,"近"指针仍然有用 - 实际上,这就是我们现在称之为"指针"的那种指针.它仍然可以创建一个远指针,但它在大多数32位或64位操作系统中几乎无用. (3认同)
  • 可移植性并不值得牺牲那种性能,尤其是当您为PC*编写代码*时.几乎所有地球上的PC都运行x86.当时根本没有其他平台值得关注,即使在今天它仍然是一个延伸(虽然32位x86 CPU平衡了竞争环境,使得细分不那么明显,几乎无用).如果您的程序是用于DOS和/或Win3.x和/或某些DOS扩展程序和/或x86上的任何其他16位环境,并且您没有考虑该平台,那么您的代码将会变慢. (2认同)