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

为什么保留内存地址0x0,为什么?我无法理解究竟是什么,谢谢你的帮助
它主要是一种约定,它是特定于实现的.

C语言标准(C99或C11) – 以及一些其他编程语言(如Lisp)具有null pointer的概念,它不能被解引用(即undefined behavior,segmentation fault)并且与任何其他指针(对于某些有效的存储器位置)不同. Tony Hoare谦虚地称之为概念“my billion dollar mistake”,而一些语言(Haskell,Ocaml)则有一些tagged unions类型(例如Ocaml中的“选项”).

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

实际上,在台式机,笔记本电脑或平板电脑上,用户模式C程序在某些virtual address space中运行,其中未映射包含地址0的页面. (在某些Linux上,你或许可以mmap(2)使用MAP_FIXED地址0,但这样会很差……)

在某些嵌入式microcontrollers(例如AVR)中,可以使用地址0.

在理论上(以及过去),地址可能比数字更复杂……(在20世纪80年代,例如x86 memory segmentation i286iAPX432寻址,Rekursiv架构等……)

阅读C编程,微处理器架构和数据库的几本书籍和网页. instruction sets,operating system原则,virtual memory,MMUs.

相关文章
相关标签/搜索