为什么保留内存地址0x0,为什么?

Kha*_*ury 5 memory ram operating-system memory-management memory-address

为什么保留内存地址0x0,为什么?我无法理解究竟是什么,谢谢你的帮助

Bas*_*tch 3

它主要是一个约定,并且是特定于实现的。

C 语言标准(C99 或 C11)以及其他一些编程语言(例如 Lisp)具有不能取消引用的空指针的概念(这将是未定义的行为分段错误)并且不同于任何其他指针(指向某些有效的指针)。内存位置)。Tony Hoare 谦虚地称这个概念为“我的十亿美元错误”,并且某些语言(Haskell、Ocaml)有一些标记的联合类型(例如'a option在 Ocaml 中)。

大多数实现(但不是全部)通过地址 0 表示空指针。

实际上,在台式机、笔记本电脑或平板电脑上,用户模式 ​​C 程序在某些虚拟地址空间中运行,其中包含地址 0 的页面未映射。(在某些 Linux 上,您也许可以使用地址 0进行 mmap(2)MAP_FIXED,但这会很糟糕......)

在一些嵌入式微控制器(例如AVR)中,可以使用地址0。

理论上(以及过去),地址可能比数字更复杂...(在 20 世纪 80 年代,例如i286上的x86 内存分段iAPX432寻址、Rekursiv架构等...)

阅读一些有关 C 编程、微处理器体系结构和指令集操作系统原理、虚拟内存MMU的书籍和网页。