乐闻世界logo
搜索文章和话题

What is the difference between far pointers and near pointers?

2 个月前提问
2 个月前修改
浏览次数16

1个答案

1

远指针(far pointer)和近指针(near pointer)是在早期的计算机编程,尤其是在16位操作系统中使用的概念,主要存在于如MS-DOS这类系统中,它们与指针的地址能力相关。

近指针 (Near Pointer)

  • 地址能力: 近指针只能访问同一个段内的内存。在16位操作系统中,这通常意味着它们可以访问的内存地址范围限制在64KB内。
  • 存储大小: 由于近指针只需指向同一个内存段内,它通常占用2个字节(在16位架构下)来存储。
  • 使用场合: 在需要访问限定内存段内部数据时使用,效率较高,因为它直接存储偏移地址,不涉及额外的段寻址。

远指针 (Far Pointer)

  • 地址能力: 远指针可以访问不同内存段的数据。它不仅存储偏移地址,同时存储段地址,使得它能够指向整个16位地址空间(即高达1MB)的任何地方。
  • 存储大小: 远指针需要更多的存储空间来保存额外的段信息,通常占用4个字节(在16位架构下),其中2字节用于段地址,另外2字节用于偏移地址。
  • 使用场合: 当需要访问跨段的数据或大于64KB的数据结构时,使用远指针。

实例说明

假设在一个16位的系统中,我们有两个数组,一个位于内存的0x1000段内,另一个开始于0x2000段。如果只使用近指针,我们无法从0x1000段直接访问0x2000段的数组。但是,使用远指针,我们可以设置指针的段地址为0x2000,并将偏移设置为数组的开始,从而访问任何段内的任何数据。

当今应用

在现代操作系统和编程环境中(如32位或64位系统),整个分段的概念已被平坦的内存模型所取代,实际上已经淘汰了远指针和近指针的使用。现代编程语言和编译器一般不再区分远指针和近指针,而是使用统一的指针模型来简化内存管理和提高程序兼容性和运行效率。

总的来说,远指针和近指针的区别主要在于它们的内存访问范围和实现机制,这在现代编程实践中已经不再是一个常见的区分。不过,了解这些概念有助于理解早期计算机科学的一些历史和设计决策。

2024年7月22日 18:17 回复

你的答案