可以在地址0分配有效指针吗?

时间:2011-07-12 02:09:35

标签: c++ pointers null std

在任何“主要平台”(我为了这个问题而定义为Windows,Mac和Linux),可以想象在程序地址空间中在地址0分配有效分配的指针(因此搞砸比较为NULL?) 标准是否甚至允许编译器/平台在地址0处进行有效分配?

2 个答案:

答案 0 :(得分:7)

C ++标准允许它,但是这样的指针不会比较文字0(NULL指针常量)。

主要操作系统中的用户模式应用程序永远不会有一个有效指针为0,甚至在-65536到65535范围内(以帮助检测来自NULL指针的偏移量)。

在大多数情况下,0作为可用地址仅存在于嵌入式系统中,并且很少存在于PC操作系统的内核中。但虚拟内存系统保留了它,没有任何我听说过的例外。

答案 1 :(得分:2)

NULL - 指针(或更确切地说:在需要指针的上下文中的0标记)并不一定意味着地址0,而是一个已知的地址在这个平台上无效。因此,假设符合标准的编译器,与空指针的比较是安全的。