void far detectgraph(int *gdriver, *gmode);中far的意思
发布网友
发布时间:2023-06-01 11:59
我来回答
共2个回答
热心网友
时间:2024-10-22 17:19
在DOS下,所有地址都可以表示为“段:段内偏移量”的方式,即XXXX:XXXX。如果在段内部进行操作使用near指针,即段采用当前的数据段,而指针地址为段内偏移量,这样通常更快些,但是所能表示的地址范围有限。为了表示更广的范围,可以使用far*(远指针),就是不管当前的数据段是什么,采用XXXX:XXXX的方式指明地址。
热心网友
时间:2024-10-22 17:20
near指针和far指针
在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()这样的内存分配函数一起使用。
参考资料:http://www.7880.com/Info/Article-5bb3a5a0.html