LINUX.ORG.RU

История изменений

Исправление wandrien, (текущая версия) :

Где в стандарте написано, что область памяти не может начинаться с адреса 0. В какой-нибудь другой архитектуре например?

В Си константа 0, преобразованная в адрес, имеет особую семантику «никуда не указывающего» указателя. Это написано в стандарте, конкретную страницу искать лень.

При этом в железе этот 0 не обязан быть значением «все биты нулевые», а зависит от реализации. Но архитектуры, где бы это пригодилось, мне не известны.

Всё это потому, что стандарт заточен на прикладной код, которому действительно не требуется адресовать нулевые указатели.

Если подумать, под ядро должно быть сделана особая оговорка, и возможно, в режиме freestanding семантика должна отличаться (или должен быть введён отдельный режим), но так как такого не сделано, то формально компилятор прав. Он же не знает, что это ядро.

Исходная версия wandrien, :

Где в стандарте написано, что область памяти не может начинаться с адреса 0. В какой-нибудь другой архитектуре например?

В Си константа 0, преобразованная в адрес, имеет особую семантику «никуда не указывающего» указателя. Это написано в стандарте, конкретную страницу искать лень.

При этом в железе этот 0 не обязан быть значением «все биты нулевые», а зависит от реализации. Но архитектуры, где бы это пригодилось, мне не известны.

Всё это потому, что стандарт заточен на прикладной код, которому действительно не требуется адресовать нулевые указатели.

Если подумать, под ядро должно быть сделана особая оговорка, и возможно, в режиме freestanding семантика должна отличаться (или должен быть введён отдельный режим), но так ка такого не сделано, то формально компилятор прав. Он же не знает, что это ядро.