内存的物理部分是否为NULL(0)?

Poo*_*ria 3 c++ memory null pointers

我知道当你想要指出这个特定的指针没有指向它应该被设置为NULL(实际上是0)时,有一句老话,但我想知道实际上是不是存在地址的物理部分NULL(0)?

Oli*_*rth 6

总是有一个0的物理地址(但它可能不一定映射到物理RAM),但在典型的平台上,任何访问通常都会在虚拟地址空间中执行(如jweyrich指出的那样,你可以使用mmap等等)直接映射物理地址空间),因此任何读取/写入地址0的尝试都会引发某种异常.

在更简单的处理器(想想微控制器等)上,可能没有这样的保护,所以如果你试图写入地址0,就没有什么可以抓住你了.

另请注意,空指针不一定必须指向地址0; 唯一的保证是它将比较等于整数值0.

  • `总是有一个0的物理地址 - 可能是某个奇怪的微控制器某个地方由于某种原因没有定义0的物理地址. (6认同)
  • @Oli Charlesworth:"但在典型的平台上,任何访问都将在虚拟地址空间中执行 - 这并非完全正确.例如,当`/ proc/sys/vm/mmap_min_addr`设置为0时,Linux允许你`mmap()`地址0.这就是null-pointer-dereference bug被利用的方式:-) (2认同)