在
DOS下(
实模式)地址是分段的,每一段的长度为64K
字节,刚好是16位(二进制的十六位)。
near
指针的长度是16位的,所以可指向的地址范围是64K字节,通常说near指针的寻址范围是64K。
far
指针的长度是32位,含有一个16位的基地址和16位的
偏移量,将基地址乘以16后再与偏移量相加,(所以实际上far指针是20位的长度。)即可得到far
指针的1M字节的
偏移量。所以far
指针的寻址范围是1M字节,超过了一个段64K的容量。例如一个far指针的
段地址为0x7000,
偏移量为0x1244,则该指针指向地址0x71224.如果一个far
指针的段地址是0x7122,偏移量为0x0004,则该指针也指向地址0x71224。
如果没有指定一个
指针是near或far,那么默认是near。所以far
指针要显式指定。far
指针工作起来要慢一些,因为每次访问一个far指针时,都要将
数据段或
程序段的数据交换出来。另外,far
指针的运算也比较反常,例如上面讲到的far指针指向同一个地址,但是比较的结果却不相同。
什么时候使用far
指针?
当使用小
代码或小数据
存储模式时,不能编译一个有很多代码或数据的程序。因为在64K的一个段中,不能放下所有的
代码与数据。为了解决这个问题,需要指定以far
函数或far
指针来使用这部分的空间(64K以外的空间)。许多
库函数就是显式地指定为far函数的形式。far
指针通常和farmalloc()这样的
内存分配
函数一起使用
far指针
最新推荐文章于 2021-05-25 12:07:27 发布