❶ 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,使用的是平面地址機制,沒有近程型或遠程型限制。
求採納