Успение: Вы говорите о возможности того, что возвращение malloc или new должно быть 0 в какой-то момент.
В этом случае я считаю, что ответ отрицательный. Указатель примет виртуальный адрес . Будучи чем-то выделяется динамически, он получит адрес, принадлежащий Куча, что никогда не начинается с адреса 0.
Виртуальное пространство памяти вашего процесса разделен на несколько разделов: текст, данные, BSS, Heap (где все динамически выделенные объекты идут), стек и пространство ядра. Ниже приведено изображение для 32-битной ОС, но для 64b изображение похоже.
Вы можете сделать небольшую программу и прочитать некоторые адреса в разных пространствах и понять, к чему вы можете и не можете получить доступ.
кучного (место, где указатель будет указывать), растет после текста, данных и BSS сегментов. Так оно никогда не будет 0.
Это может быть. Но как это повлияет на ваш код каким-либо образом? – immibis
Извините, но я слышал, что адресное пространство, содержащее 0, зарезервировано для обработки исключительных ситуаций, проверка недействительных указателей, причем это место памяти может использоваться только ядром os. Правильно ли это? –
И Windows, и Linux никогда не сделают адрес 0 действительным адресом, не знают о Mac OS. Но как это повлияет на ваш код каким-либо образом? – immibis