Memory 为什么要保留内存地址0x0,用于什么?

Memory 为什么要保留内存地址0x0,用于什么?,memory,memory-management,operating-system,ram,memory-address,Memory,Memory Management,Operating System,Ram,Memory Address,为什么要保留内存地址0x0,用于什么?我很难理解到底是什么,谢谢你的帮助。这主要是一个约定,并且是特定于实现的 C语言标准(C99或C11)和一些其他编程语言(如Lisp)的概念是不能取消引用(即,),并且与任何其他指针(指向某个有效内存位置)不同。Tony Hoare谦虚地称之为这个概念,有些语言(Haskell,Ocaml)有一些类型(例如,Ocaml中的'a选项) 大多数实现(但不是全部)通过地址0表示空指针 实际上,在台式机、膝上型电脑或平板电脑上,用户模式C程序在包含地址0的页面未映射

为什么要保留内存地址0x0,用于什么?我很难理解到底是什么,谢谢你的帮助。这主要是一个约定,并且是特定于实现的

C语言标准(C99或C11)和一些其他编程语言(如Lisp)的概念是不能取消引用(即,),并且与任何其他指针(指向某个有效内存位置)不同。Tony Hoare谦虚地称之为这个概念,有些语言(Haskell,Ocaml)有一些类型(例如,Ocaml中的
'a选项

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

实际上,在台式机、膝上型电脑或平板电脑上,用户模式C程序在包含地址0的页面未映射的某些位置运行。(在某些Linux上,您可能可以使用
MAP\u修复地址0,但这将是一种低级趣味…)

在某些嵌入式系统中(例如),可以使用地址0

在理论上(和过去),地址可能比数字更复杂。。。(在20世纪80年代,例如,关于和寻址、架构等)


阅读几本关于C编程、微处理器体系结构和原理的书籍和网页。

在分页内存系统中,默认情况下不映射第一页(第零页)是一种常见做法。这是通常由链接器强制执行的约定。当程序加载器读取可执行文件时,它永远不会得到映射第一个逻辑页的指令

这样做的原因是检测空指针错误

int *whatever = 0 ;
 . . . . 
*whatever = 10 ;
将导致访问冲突

也就是说,进程通常可以在执行开始后映射第一个(第零个)页面,并且在某些情况下,您可以指定允许程序节基于该页面的链接器选项