我想了解更多關於內存的信息,我無法從Google中找到它,請原諒我,如果這是愚蠢的問題。0 - 65535之間的第一個內存地址的空引用
爲什麼以下代碼,訪問存儲器地址0(和高達65535)在C#會拋出的NullReferenceException
字節*指針=(字節*)0;
byte test = *指針;
非常感謝!
我想了解更多關於內存的信息,我無法從Google中找到它,請原諒我,如果這是愚蠢的問題。0 - 65535之間的第一個內存地址的空引用
爲什麼以下代碼,訪問存儲器地址0(和高達65535)在C#會拋出的NullReferenceException
字節*指針=(字節*)0;
byte test = *指針;
非常感謝!
這是Windows本身的設計特性。爲了在開發週期的早期抓住程序員的錯誤,從0到64K( - 1)的虛擬地址在所有進程中都是無效的。
對不起,請問你是什麼意思,「虛擬地址從0到64K( - 1)在所有進程中都是無效的。」因爲我認爲這是真實的地址,非常感謝! – Terry 2010-05-18 14:03:38
你有參考嗎? – 2010-05-18 14:12:54
Terry, 如果您正在運行Windows「真實」地址並不真實存在。 查看它的簡單方法是每個應用程序「認爲」它在其自己的x86,x64計算機上運行。它有自己的地址空間et.al. ..so..在一個應用程序中指向0xDEADBEEF的指針不指向另一箇中的內存地址0xDEADBEEF。有趣,是不是:) – Rusty 2010-05-18 14:17:09
有沒有地址工作,或他們*都*扔NRE的? – 2010-05-18 13:57:54
0-65535之間的所有地址都拋出此異常,他們是否保留以避免16位系統之間的衝突? – Terry 2010-05-18 14:01:02
關鍵詞是「虛擬內存」。任何關於操作系統設計的書都會告訴你這是什麼意思。 – 2010-05-18 16:36:45