指標所佔記憶體剖析

2021-06-17 16:18:28 字數 746 閱讀 3645

指標的長度並非跟計算機字長有關,準確地說,是跟段大小和編譯模式有關。你所看到的16位cpu指標兩個位元組、32位cpu指標四個位元組其實是一種錯覺。

指標所指向的實體,無非在_code、_data、_bss、const和stack段,指標的值是這些段的段內偏移,段內偏移結合段暫存器的段值(實模式)或者段描述符(保護模式)構成實際的實體地址。vc等編譯器工作在保護模式,在保護模式中,乙個段最大可以是4g,其偏移量由32位表示,因此vc的指標是四個位元組;而tc2.0等編譯器工作在實模式,乙個段最大64k,偏移量以16位表示,因此在mini、small、medium三種模式下,tc2.0的指標通常是兩個位元組,執行在windows中的tc2.0工作在虛擬8086模式,這個模式通過分頁把tc2.0的工作空間對映回實模式使用的第乙個1m記憶體,段大小仍然是64k,因此指標大小仍然是16位,但是,有一點不同的是,工作在compact、lardge和huge模式的指標,預設是包含16位的段值的,因此這三個模式下的指標,預設是四個位元組的,當然,在mini、small和medium模式中也可以使用包含段值的指標,tc2.0的非標準擴充套件關鍵字far和huge就是起到這個作用,使用far和huge修飾的指標例如char huge*p;其長度為四個位元組。

簡言之:

指標就是乙個整數。

指標,是乙個無符號整數(unsigned int,下簡寫為int),它是乙個以當前系統定址範圍為取值範圍的整數。32 位系統下定址能力(位址空間)是4g-bit(0~232-1)二進位制表示長度為32bit,也就是4byte。 int型別也正好如此取值

指標變數所佔記憶體

應該說這是乙個非常基礎的問題,教科書上說指標大小和機器字長相同,即32位機指標長度為4位元組!但是對不對呢?為什麼是這樣?搜了一下相關資料。居然發現回答不統一,很多人也同樣是糊里糊塗。字長 在同一時間中處理二進位制數的位數叫字長。通常稱處理字長為8位資料的cpu叫8位cpu,32位cpu就是在同一時...

指標變數在記憶體中佔 指標在系統記憶體中所佔的位元組數

sizeof 的特點 printf d int printf d float printf d double 其結果為 4 4 4 這就是面試的時候問你,指標在記憶體中佔多少個位元組?這就是個問題不是簡單的2,4,甚至8個位元組 回答 指標在記憶體中所在的位元組數是由系統的定址能力決定的,定址能力就...

類所佔記憶體的大小

成員函式還是以一般的函式一樣的存在。a.fun 是通過fun a.this 來呼叫的。所謂成員函式只是在名義上是類裡的。其實成員函式的大小不在類的物件裡面,類所佔記憶體的大小不包括成員函式的大小,虛擬成員函式除外。同乙個類的多個物件共享函式 而我們訪問類的成員函式是通過類裡面的乙個指標實現,而這個指...