C語言裡的near和far是什麼意思?

2021-10-10 16:54:23 字數 1501 閱讀 6240

熟悉程式設計的通常會用到一些lp開頭的資料型別來定義指標,比如以下vs裡minwindef.h中的部分內容:

typedef

unsigned

long dword;

typedef

int bool;

typedef

unsigned

char byte;

typedef

unsigned

short word;

typedef

float float;

typedef float *pfloat;

typedef bool near *pbool;

typedef bool far *lpbool;

typedef byte near *pbyte;

typedef byte far *lpbyte;

typedef

int near *pint;

typedef

int far *lpint;

typedef word near *pword;

typedef word far *lpword;

typedef

long far *lplong;

typedef dword near *pdword;

typedef dword far *lpdword;

typedef

void far *lpvoid;

typedef const void far *lpcvoid;

其中有用到near和far,簡單來看分別是定義短指標和長(l)指標。可以驗證typedef時用near修飾指標長度是far修飾指標長度的一半。由於以前沒看見過,就好奇查了查,總結了以下結果:

near和far是在定義近指標、遠指標需要用到的,是16位cpu造就的怪胎;

現在的32位以上的cpu已經沒有這種形式了。

16位cpu(主要指80386和80486)內部陣列匯流排為16位,位址匯流排為24位。這就意味著乙個字(16bit)存不下乙個位址,要用到兩個字。習慣把高位字稱為段位址,低位字稱為偏移位址。

程式執行時,os會給程式分配幾個記憶體段供程式使用,主要的有**段(cs)、資料段(ds)、堆疊段(ss)。根據不同的編譯模式這幾個段可能重合。

當指標指向的位址與資料段的段位址相同(即處於資料段內),這時可以不記錄段位址而僅記錄偏移位址(只需16bit)。這種指標稱為近指標(near指標)。

當指標指向的位址與資料段的段位址不同(即處於資料段外),這裡不僅要記錄偏移位址還要記錄段位址(共需32bit)。這種指標稱為遠指標(far指標)。

C C 中near和far的區別

c 中far,near區別 雪后de陽光 c c 中near和far的區別 關鍵字near 和far 受目標計算機體系結構的影響。目前程式設計中使用不多。near 關鍵字建立乙個指向可定址記憶體低端部分的目標指標。這些指標占用記憶體的單一位元組,並且他們能夠指向的記憶體單元被限制到 256個位置,通...

C C 中near和far的區別

c c 中near和far的區別 關鍵字near 和far 受目標計算機體系結構的影響。目前程式設計中使用不多。near 關鍵字建立乙個指向可定址記憶體低端部分的目標指標。這些指標占用記憶體的單一位元組,並且他們能夠指向的記憶體單元被限制到 256個位置,通常是在0x0000 0x00ff範圍中。i...

C C 中near和far的區別

關鍵字near和far受目標計算機體系結構的影響。目前程式設計中使用不多。near關鍵字建立乙個指向可定址記憶體低端部分的目標指標。這些指標占用記憶體的單一位元組,並且他們能夠指向的記憶體單元被限制到256個位置,通常是在 0x0000 0x00ff範圍中。int near ptr far關鍵字建立...