LINUX.ORG.RU

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

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

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

Универсального (академического) указателя всё-равно не существует.

А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.

Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.

В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор. И это не обязательно компилятор gcc, есть много других Си-компиляторов.

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


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

Исправление Vic, :

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

Универсального (академического) указателя всё-равно не существует.

А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.

Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.

В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор. И это не обязательно компилятор gcc, есть много других Си-компиляторов.


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

Исправление Vic, :

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

Универсального (академического) указателя всё-равно не существует.

А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.

Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.

В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор. И это не обязательно компилятор gcc, есть много других Си-компиляторов.

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

Исправление Vic, :

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

Универсального (академического) указателя всё-равно не существует.

А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.

Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.

В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор. И это не обязательно компилятор gcc, есть много других Си-компиляторов.

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

Исправление Vic, :

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

Универсального (академического) указателя всё-равно не существует.

А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.

Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.

В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор.

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

Исправление Vic, :

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

Универсального (академического) указателя всё-равно не существует.

А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.

Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.

В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор.

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

Исправление Vic, :

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

Универсального (академического) указателя всё-равно не существует.

А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели памяти (memory model) в настройках проекта/компилятора. А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.

Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.

В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор.

PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением.

Исправление Vic, :

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

Универсального (академического) указателя всё-равно не существует.

А из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства внутри выбранной модели (memory model). А если код не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.

Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.

В embedded компиляторах можно управлять структурой адреса, если это поддерживает процессор и его архитектура, указывая модель памяти указателя (near, far, huge, xhuge и т.п.) в соответствующей модели памяти (memory model), которую поддерживает компилятор.

PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением.

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

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

Из прошедшего через меня кода, в большинстве случаев, весь код пишется с учетом линейности адресного пространства. А если он не работает на каком-то процессоре или архитектуре, то либо портируют, либо забивают и пишут новое, либо используют библиотеки, в которых уже всё предусмотрено.

Соответственно, лично я считаю, что работать с указателями как со значениями - можно, но нужно учитывать структуру значения адреса.

PS. Не призываю никого нарушать некие стандарты Си, просто поделился своим мнением.