❶ C语言中函数前面的far是什么意思
如果学过汇编应该知道近指针和远指针,far就是表示远指针,其实还有关键字near,near表示16位寻址,指针长度16位,far表示20位寻址,指针长度20位。在32位系统中,内存管理为4G平坦模式,统一用32位指针,因此far和near仅仅是兼容的需要。不少编译器都直接这样定义:
#define far
#define near
❷ C/C++中的far关键字是什么意思
far是WINDOW3.2的前的产物,也就是说是在大的寻址区做16位编程时所用到的,在WIN32平台下这个关键字已不再需要,因为已经统一为FAR型了,无论你加还是不加.
❸ C语言中,指针的意思是什么FAR指针又是什么
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.turinger.com/forum_view.asp?forum_id=4&view_id=199 其实你只要记住,指针就是地址,和数组一样,其实你写代码的时候可以先用数组 然后把数组换成指针
❹ C语言近程型(near)和远程型(far)的区别是什么如题 谢谢了
DOS用一种分段结构来寻址计算机的内存,每一个物理存储位置都有一个可以用段一偏移量方式来访问的相关地址。例如,下面就是一个典型的段式地址: A000:1234 冒号左边的部分代表段地址(A000),冒号右边的部分代表相对于段地址的偏移量。DOS下的每个程序都是按这种方式访问内存的——尽管段一偏移量寻址方法的机理对大多数C程序员来说是隐蔽的。 当你的程序被执行时,一个存放在数据段(DS)寄存器中的数据段地址将被赋给你的程序。这个缺省的数据段地址指向一个64KB的内存空间,这个空间通常就被叫做近程型数据段。在这个近程型数据段空间中,你会找到程序的栈、静态数据和近程堆。近程堆用来为程序启动时所需的全局变量和其它数据元素分配内存,在这个空间中分配的任何数据都被叫做近程型数据。例如,下面的程序在程序启动时从近程堆中分配了32KB的近程型数据: / * Note :Program uses the Medium memory model...* / # include <stdio. h> # include <alloc. h> # include <string. h> # include <stdlib. h> # include <dos. h> void main(void) ; void main(void) { char * near_data; near_data= (char * )malloc((32 * 1024) * sizeof(char)) ; if (near data= = (char * )NULL) { printf("Whoopsie ! Malloc failed! \n") ; exit(l) ; } strcpy (near_data, "This string is going to be. stored in the near heap") ; printf("Address of near_data : %P\n", ,&near_data) ; free (near_data) ; } 在上例中,near_data是一个字符指针,程序分配给它一个32KB的内存块。在缺省情况下,这个32KB的内存块是从近程堆中分配的,并且相应的16位地址将被存放在字符指针near_data中。 现在,你已经知道什么是近程型数据了,但你可能还不大明白什么是远程型数据,很简单,远程型数据就是位于缺省数据段(第一个64KB数据段)以外的数据。下例中的程序从远程型数据区(通常也叫做远程堆)中分配了32KB的空间: / * Note:Program uses the Medium memory model... * / # include <stdio. h> # include <alloc. h> # include <string. h> # include <stdlib. h> #include <dos. h> void main(void) ; void main(void) { char far * far_data; far_data= (char far * )farmalloc((32 * 1024) * sizeof(char)) ; if (far data= = (char far*)NULL) { printf ("Whoopsie ! Far malloc failed ! \n") ; exit (1) ; } fstrcpy(far data, "This string is going to be stored in the far heap"); printf("Address of far_data : %Fp\n",&far_data) ; farfree (far_data) ; } 在这个例子中,远程型字符指针被赋予了一个32位地址,该地址对应于远程堆中一块32KB的可用内存。注意,为了明确地从远程堆中分配内存,必须使用一个far指针,因此上例的字符指针定义中加入了远程型修饰符(far)。此外,你还要注意,从远程堆中分配内存的一些函数(fareoreleft(),farmalloe(),farfree())和从近程堆中分配内存的函数是不同的。 远程堆中的可用内存通常比近程堆中的多得多,因为近程堆被限制在64KB之内。如果你在你的计算机上编译并运行前面的两个例子,你会发现第一个例子(从近程堆中分配内存)大约有63KB的可用内存,而第二个例子(从远程堆中分配内存)大约有400KB到600KB(依赖于你的计算机配置)的可用内存。因此,如果你的程序需要大量的内存来存储数据,你就应该使用远程堆而不是近程堆。 不管使用哪一种存储模式(Tiny存储模式除外),你都可以用near和far修饰符以及相应的近程型和远程型函数来明确地从近程堆和远程堆中分配内存。合理地使用近程型和远程型数据,将有助于提高程序的运行效率,减少程序用尽内存的危险。 注意,因为DOS使用的是段地址结构寻址机制,所以近程型和远程型数据的概念是运行DOS的PC机所独有的。其它操作系统,例如UNIX和Wndows NT,使用的是平面地址机制,没有近程型或远程型限制。
求采纳