Можно ли разместить действительный указатель по адресу 0? - PullRequest
4 голосов
/ 12 июля 2011

На любой из «основных платформ» (которую я определяю как Windows, Mac и Linux для целей этого вопроса) возможно ли размещение правильно назначенного указателя по адресу 0 в адресном пространстве программ (поэтому запутываете сравнения с NULL?) Разрешает ли стандарт даже компилятору / платформе иметь правильное распределение по адресу 0?

Ответы [ 2 ]

7 голосов
/ 12 июля 2011

Стандарт C ++ допускает это, но такой указатель не будет сравниваться с литералом 0 (константа указателя NULL).

Однако приложения пользовательского режима в основных ОС никогда не будут иметьдопустимый указатель на 0 или даже в диапазоне от -65536 до 65535 (чтобы помочь обнаружить смещения из указателя NULL).

В большинстве случаев 0 в качестве используемого адреса существует только во встроенных системах, иочень редко в ядрах операционных систем ПК.Но системы виртуальной памяти резервируют это, без каких-либо исключений, о которых я когда-либо слышал.

2 голосов
/ 12 июля 2011

Указатель NULL (точнее: токен 0 в контексте, где требуется указатель) не обязательно означает адрес 0, а скорее адрес, который, как известно, недопустим на этой платформе,Поэтому сравнения с нулевым указателем безопасны при условии, что компилятор совместим.

...