C/C++中的far和near两个指针

Dos 的设计是基于16位的CPU的,也就是CPU中的每个寄存器(Register)只有16位,只能存放0-65535(64K)的值。为了能访问大于64K的内存,人们用了分段的方法,用两个16位的数来记录逻辑上地址,第一个是段值(Segment),第二个是偏移量(Offset),写起来的格式一般是 段值:偏移量。如 0100:0020 (十六进制,地址通常用十六进制的数字) 。这样就有一个32位的地址了。严格来说,因为硬件的缘故,段值个位(当然是十六进制的个位)只能为零,这种分段的方法并不能访问32位范围内的所有地址。

一般的Dos程序都把执行的代码放在一个段,数据放在另一个段。当然,这只是逻辑上的。而且也有例外,如所有的com格式的程序代码段也放数据。

Dos 下的16位c编译器(如 TC 2.0, M$ C)产生的可执行文件(exe)都可以选代码模式,例如:Huge, Large, Medium, Small, Tiny(Compact)等等。其区别只在于用多少个段来放代码和数据。

如果上面的你都明白了,下面的就好理解了。

16位c编译器的整型和指针默认是16位的。默认指针只有偏移量(Offset)的值,只能指向同一段的地方。也叫近程指针(Near Pointer)。当要用指针访问另一个段的地方时,就要定义指针32位的远程指针(Far Pointer)。当程序有多于一个的代码段(如果是函数指针)或数据段(如果是变量指针),而指针和指向的地方不在同一个段的时候,就必须把指针定义为远程指针(Far Pointer)。  
自己的帖子自己回吧,这个是以前AKUMA的网友的解释FAR指针,明白了!

时间: 2024-08-27 17:51:32

C/C++中的far和near两个指针的相关文章

需求:过滤下面这个网页里共723行 校对中里 行数为两位数的 行 并设置sz和rz在Windows和Linux之间发送和接收文件不用搭FTP

需求:过滤下面这个网页里共723行 校对中里 行数为两位数的 行 因为翻译当然要选择行数少的来翻译,翻译PG文档 https://github.com/postgres-cn/pgdoc-cn/wiki/check9.3grep  -E  "共[0-9]{2}行"  check9.3 [[email protected] ~]# grep  -E  "共[0-9]{2}行"  check9.3 |wc -l32 打开SecureCRT软件 -> Options

HTML中设置背景图的两种方式

HTML中设置背景图的两种方式 1.background    background:url(images/search.png) no-repeat top; 2.background-image    background-image:url(images/search.png):    background-repeat:no-repeat;

算法学习(3)----求数组中大小最接近的两个元素的差

<算法设计与分析基础>习题1.2 第 9 题如下: 考虑下面这个算法,它求的是数值数组中大小最接近的两个元素的差. 算法: MinDistance(A[0..n-1]) //输入:数字数组 A[0..n-1] //输出:数组中两个大小相差最少的元素的差值 dmin <- ∞ for i <- 0 to n-1 do for j <- 0 to n-1 do if i≠j and |A[[i]-A[j]| < dmin dmin <- |A[i]-A[j]| ret

Windows azure中公用云服务的两个虚机FTP的设置

在Windows azure中,若两个虚机公用一个云服务,则这两个虚机对互联网的IP即外网的IP是一样. 建立FTP的时候,在此处选择指定的用户,在两个虚机里要设置不同FTP用户的账户,并同时在FTP目录中添加对应的FTP账户!     这样在通过FTP链接的时候,输入相同的IP和不同的账号,则会连接到账号对应的虚机 Windows azure中公用云服务的两个虚机FTP的设置,布布扣,bubuko.com

java:在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作

在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作 //在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作 List<String> addlist = new ArrayList<String>(); addlist.add("hi"); addlist.add(0,"hello"); addlist.add("world"); Object obj[] = addli

action中请求参数获取的两种方式

action中请求参数获取的两种方式 1.属性驱动? a.直接在 action 类中提供与请求参数匹配属性,提供 get/set 方法? b.在 action 类中创始一个 javaBean,对其提供 get/set ,在请求时页面上要进行修改,? 例如 user.username user.password ,要使用 ognl 表达式? 以上两种方式的优缺点:? 第一种比较简单,在实际操作我们需要将 action 的属性在赋值给模型(javaBean)去操作? 第二种:不需要在直接将值给 ja

Ajax中的get和post两种请求方式的异同

Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.   1. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址.用户看不到这个过程.   2. 对于get方式,服务器端用Request.QueryS

strus2中获取表单数据 两种方式 属性驱动 和模型驱动

strus2中获取表单数据 两种方式 属性驱动 和模型驱动 属性驱动 /** * 当前请求的action在栈顶,ss是栈顶的元素,所以可以利用setValue方法赋值* 如果一个属性在对象栈,在页面上可以根据name属性进行回显*/ /** * 属性驱动实现的条件:* 1.当前请求的action在栈顶,所以action中的属性就暴漏出来了* 2.获取页面上表单的元素,整合成一个map * 3.调用setValue方法赋值*/ 1 package cn.itcast.struts2.sh; 2 3

Android中 与数据库有关的两个废除的方法

占没有查到替换的方法,先记着! The method startManagingCursor(Cursor) from the type Activity is deprecated The constructor SimpleCursorAdapter(Context, int, Cursor, String[], int[]) is deprecated Android中 与数据库有关的两个废除的方法,布布扣,bubuko.com