0 - 65535之间的第一个内存地址的空引用

问题描述:

我想了解更多关于内存的信息,我无法从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

这是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