有人能告诉我C语言中far个指针和near个指针的区别吗?

推荐答案

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

  • DS→ 数据段
  • 反恐精英→ 代码段
  • 党卫军→ 堆栈段
  • 锿→ 额外部分

该体系 struct 上的逻辑地址写为segment:offset.现在回答这个问题:

  • 近指针指(作为偏移)当前段.

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

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

在32位和64位体系 struct 上,内存模型使用不同的段,或者根本不使用.

C++相关问答推荐

理解C中的指针定义

在#include中使用C宏变量

C编译器是否遵循restrict的正式定义?

以前版本的tty_ldisc_ops.ioctl()是否也需要文件参数?

在没有动态内存分配的情况下,用C语言最快地将各种数组复制到单个较大的数组中

字符是否必须转换为无符号字符,然后才能与getc家族的返回值进行比较?

Linux不想运行编译后的文件

Make Node函数.S有什么问题吗?

使用sscanf获取零个或多个长度的字符串

在C++中访问双指针

为什么memcpy进入缓冲区和指向缓冲区的指针工作相同?

GTK3按钮信号错误

I2C外设在单次交易后出现故障

关于scanf()和空格的问题

将回调/基于事件的C API转换为非回调API

为什么二进制文件的大小不会随着静态数据的大小而增加?

C中的数组下标和指针算法给出了不同的结果

为什么<到达*时不会转换为>?

如何用用户输入的多个字符串填充数组?

与 C 相比,C++ 中无副作用的无限循环的好处是 UB?