c - 远指针和近指针有什么区别?

标签 c pointers

谁能告诉我 C 中 far 指针和 near 指针的区别?

最佳答案

在 16 位 x86 分段内存架构上,四个寄存器用于引用各自的段:

  • DS → 数据段
  • CS → 代码段
  • SS → 堆栈段
  • ES → 额外段

此架构上的逻辑地址写为segment:offset。现在回答问题:

  • 附近指针引用(作为偏移量)当前段。

  • 远指针使用段信息和偏移量跨段指向。因此,要使用它们,必须将 DS 或 CS 更改为指定值,内存将被取消引用,然后恢复 DS/CS 的原始值。请注意,对它们的指针运算不会修改指针的段部分,因此溢出偏移量只会将其环绕。

  • 然后是巨大的指针,它们被规范化为具有给定地址的最高可能段(与远指针相反)。

在 32 位和 64 位架构上,内存模型使用不同的段,或者根本不使用段。

关于c - 远指针和近指针有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1749904/

相关文章:

内存中的 C++ 对象

c - GCC:编译不同文件夹中的文件

c++ - char* 到 const wchar_t * 转换

c - 指向数组的指针

c - 服务器与多个客户端使用 fork()

c++ - 如何引用结构变量并使用或不使用指针进行初始化

c - 删除 C 结构中指针的常量性

C - 创建动态矩阵函数的问题

c - 我如何在 C 中的字符指针上应用 << 运算符和++ 运算符

c - 如何使用内置函数在运行时检查 msr.le?