LINUX.ORG.RU

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

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

Массивы легко могут располагаться в нескольких страницах/сегментах структурированного значения адреса. Компилятор никогда не отловит переход адреса элемента массива через структуры адресов.

Никто его и не обязывает, если что то UB, это не значит что компилятор будет это ловить. А если представить все же некую платформу, с сегментами и где UB ложиться на архитектуру, то компилятор может просто использовать дальние указатели там где он не уверен, и ближние там где он точно знает что массив не пересекает сегмент, или вообще запретить массивы больше одного сегмента и распологать их по границам, тогда именно компилятору ничего ловить не надо, сломается код в рантайме.

А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти

Я даже не знаю современных платформ без линейных адресов.

В embedded компиляторах можно управлять структурой адреса

Это уже не относится к стандарту С.

Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением, что универсальных указателей в языке Си/С++ не существует, как и не существует универсальных «правил» для работы с «универсальными» указателями. Всё имеет свои пределы «универсальности».

Я именно про стандарт говорил, реальность конечно отличается.

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

Массивы легко могут располагаться в нескольких страницах/сегментах структурированного значения адреса. Компилятор никогда не отловит переход адреса элемента массива через структуры адресов.

Никто его и не обязывает, если что то UB, это не значит что компилятор будет это ловить. А если представить все же некую платформу, с сегментами и где UB ложиться на архитектуру, то компилятор может просто использовать дальние указатели там где он не уверен, и ближние там где он точно знает что массив не пересекает сегмент, или вообще запретить массивы больше одного сегмента и распологать их по границам, тогда именно компилятору ничего ловить не надо, сломается код в рантайме.

А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти

Я даже не знаю современных платформ без линейных адресов.

В embedded компиляторах можно управлять структурой адреса

Это уже не относится к стандарту С.

Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением, что универсальных указателей в языке Си/С++ не существует, как и не существует универсальных «правил» для работы с «универсальными» указателями. Всё имеет свои пределы «универсальности».