2010-05-18 82 views
3

我想了解更多關於內存的信息,我無法從Google中找到它,請原諒我,如果這是愚蠢的問題。0 - 65535之間的第一個內存地址的空引用

爲什麼以下代碼,訪問存儲器地址0(和高達65535)在C#會拋出的NullReferenceException

字節*指針=(字節*)0;

byte test = *指針;

非常感謝!

+0

有沒有地址工作,或他們*都*扔NRE的? – 2010-05-18 13:57:54

+0

0-65535之間的所有地址都拋出此異常,他們是否保留以避免16位系統之間的衝突? – Terry 2010-05-18 14:01:02

+0

關鍵詞是「虛擬內存」。任何關於操作系統設計的書都會告訴你這是什麼意思。 – 2010-05-18 16:36:45

回答

3

這是Windows本身的設計特性。爲了在開發週期的早期抓住程序員的錯誤,從0到64K( - 1)的虛擬地址在所有進程中都是無效的。

+0

對不起,請問你是什麼意思,「虛擬地址從0到64K( - 1)在所有進程中都是無效的。」因爲我認爲這是真實的地址,非常感謝! – Terry 2010-05-18 14:03:38

+0

你有參考嗎? – 2010-05-18 14:12:54

+3

Terry, 如果您正在運行Windows「真實」地址並不真實存在。 查看它的簡單方法是每個應用程序「認爲」它在其自己的x86,x64計算機上運行。它有自己的地址空間et.al. ..so..在一個應用程序中指向0xDEADBEEF的指針不指向另一箇中的內存地址0xDEADBEEF。有趣,是不是:) – Rusty 2010-05-18 14:17:09