特斯拉电动车20万:void far detectgraph(int *gdriver, *gmode);中far的意思

来源:百度文库 编辑:高考问答 时间:2024/04/28 13:48:52
void far initgraph(int far *gdriver, int far *gmode, char *path);这个函数,没有返回值,initgraph是函数名。void后面的far是什么意思?还有参数位置的两个指针之前的far是什么意思?为什么好象全部tc的图形函数都有个far呢?far什么意思,什么作用?我对它这个形式有点看不懂。希望有明白人可以指点一下!谢谢啦!
可以再说的详细通俗易懂些嘛?那如果自己写个涉及对地址操作的函数,那far该怎么用呢?

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()这样的内存分配函数一起使用。

在DOS下,所有地址都可以表示为“段:段内偏移量”的方式,即XXXX:XXXX。如果在段内部进行操作使用near指针,即段采用当前的数据段,而指针地址为段内偏移量,这样通常更快些,但是所能表示的地址范围有限。为了表示更广的范围,可以使用far*(远指针),就是不管当前的数据段是什么,采用XXXX:XXXX的方式指明地址。