2012-10-04 43 views
1

只是一個快速的問題:指針的指針在存儲器中的大小

32位機器上,是一個指針的指針(**p)將是4個字節?

+1

是的,至少通常是這樣(也就是說,可能會有一些奇怪的球系統通常被認爲是「32位」,但它不是真實的,但如果是這樣的話,這是非常模糊的)。 –

+0

任何它不應該的原因? – krlmlr

+0

的原因可能不是由於某種原因,編譯器可能會根據處理器體系結構嘗試做一些狡猾的事情,也就是說,它可能是8個字節。 –

回答

2

的邏輯是,指針僅僅是內存地址。存儲地址爲的任何存儲在具有32位地址的機器中的實體幾乎肯定是4個字節。因此存儲的指針的存儲器地址是4個字節。因此指向一個指針的指針是4個字節。 ISO C標準沒有對此做出任何承諾。這幾乎是所有實現的結果。

2

是的......它將是4個字節......但它不能保證。

+0

你的意思是「但它沒有保證。」? –

+0

沒有一個規範說它必須是那樣,但是通常編譯器會做到這一點。 –

1

正確。指針通常具有固定的大小。在32位機器上,它們通常是32位(= 4字節)。

1

通常是的,在32位機器上的地址是4個字節。

如果你不想做假設

最好的辦法是運行舊sizeof(p)

1

其他人已經提到,它肯定是32位或4個8位字節。

但是,根據硬件和編譯器的不同,它可能會更少或更多。

如果您的機器只能在32位邊界處將其存儲器作爲32位單元尋址,則必須具有更大的指針,以訪問和訪問每個32位存儲器的8位部分(chars/bytes)細胞。如果此處的編譯器決定不使用不同大小的指針,則所有指針(包括指向指針的指針)變爲34位長。同樣,如果程序非常小並且可以適應64KB,編譯器可能能夠將所有指針減少到16位。