реклама на сайте
подробности

 
 
8 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> модификатор const. Как правильно использовать в Си
demiurg_spb
сообщение Dec 27 2017, 10:12
Сообщение #31


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(juvf @ Dec 27 2017, 05:57) *
Пусть generic - общий. Что от это изменилось? Си он и в африке Си и теперь в нём есть часть (читай глава) затрагивающая ембед.
А на gcc я ссылаюсь от того что это чуть-ли не единственный (ну может быть clang ещё) доступный, открытый и ОЧЕНЬ распространнённый компилятор для огромного количества архитектур.
Люди, разрабатывающие его являются членами комитета, утверждающего и разрабатывающего стандарт Си. Чем не автортет? Не согласны - приведите свои доводы.
Не нравится как я излагаю - читайте прикреплённые мной ссылки на оригиналы статей. Ради этого я их и прилагаю.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
juvf
сообщение Dec 27 2017, 10:49
Сообщение #32


Профессионал
*****

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(demiurg_spb @ Dec 27 2017, 15:12) *
Пусть generic - общий. Что от это изменилось?

Изменилось то, что вы думает об одном, а горите другое.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 27 2017, 10:53
Сообщение #33


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(juvf @ Dec 27 2017, 13:49) *
Изменилось то, что вы думает об одном, а говорите другое.

Согласен. Бываю грешен.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Dec 27 2017, 13:23
Сообщение #34


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Демиург, вы переоцниваете значимость техникал репортов. Переводя на русский это законопроект, который отнюдь не обязательно станет законом. Собственно в итоге не включают в станадарт большинство техникал репортов. Даже тех которые заметно более полезные чем выше перечисленные.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 27 2017, 13:24
Сообщение #35


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Время покажет. Факт есть факт - в gcc уже реализовано и мало помалу обкатывается.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
inventor
сообщение Dec 27 2017, 14:34
Сообщение #36


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



мдя
задал простой вопрос
и как всегда разгорелся срач на ровном месте
Go to the top of the page
 
+Quote Post
pnp_mechanic
сообщение Dec 27 2017, 15:14
Сообщение #37


Участник
*

Группа: Участник
Сообщений: 20
Регистрация: 25-07-17
Пользователь №: 98 462



Вставлю и я свои 5 коп.
Inventor, всегда можно посмотреть адрес конкретной переменной.
Или константы . Средства Си это отлично могут делать.
Go to the top of the page
 
+Quote Post
aiwa
сообщение Dec 27 2017, 16:08
Сообщение #38


Местный
***

Группа: Участник
Сообщений: 301
Регистрация: 13-12-15
Из: Харьков
Пользователь №: 89 682



Цитата(inventor @ Dec 25 2017, 10:36) *
....в сегодняшних компиляторах для этого нужно писать в заголовке перменнные с словом extern

слово global помогло бы этого избежать


По количеству нажатий global ничем не лучше extern.
Зачем плодить синонимы?

Go to the top of the page
 
+Quote Post
Quasar
сообщение Dec 30 2017, 09:04
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 257
Регистрация: 2-12-06
Из: Default City
Пользователь №: 23 021



Цитата(razrab83 @ Dec 25 2017, 06:10) *
А почему глобальный конст во флеше, локальный в озу?



Локальная const переменная может инициализироваться в момент вызова функции и на стадии сборки неизвестна. Нечего класть во флеш. А вот static const и глобальная const переменная известны уже на стадии сборки.

PS: у меня однажды с одним коллегой драма случилась, он мне долго доказывал, что const ложится всегда исключительно в ro секцию (типа константа ЖЕ) и меняться в процессе исполнения не может (так как либо это флеш, либо область защищенная MMU). Если общение было в тот момент не по переписке, думаю и до мордобития дошло бы дело smile3009.gif
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jan 1 2018, 18:44
Сообщение #40


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Про применение volatile const для read only регистров переферии уже упоминалось?
Кажется это довольно яркая демонстрация того, что const гарантирует в первую очередь ошибку компилятора при попытке что-то записать в такую переменную, а всё остальное это уже побочные эффекты, оптимизации и здравый смысл разработчиков компилятора.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
Quasar
сообщение Jan 2 2018, 08:55
Сообщение #41


Местный
***

Группа: Свой
Сообщений: 257
Регистрация: 2-12-06
Из: Default City
Пользователь №: 23 021



Цитата(sigmaN @ Jan 1 2018, 21:44) *
Про применение volatile const для read only регистров переферии уже упоминалось?
Кажется это довольно яркая демонстрация того, что const гарантирует в первую очередь ошибку компилятора при попытке что-то записать в такую переменную, а всё остальное это уже побочные эффекты, оптимизации и здравый смысл разработчиков компилятора.


Я в свое время добавил вопрос о const в список вопросов для соискателей на собеседовании. Удивительно было то, что порой люди с опытом 5 лет и более, ничего кроме "const это константа неизменяемая" сказать не могут. А случай когда регистр периферии volatile const они обычно называют каким-то искусственным и притянутым за уши.

Go to the top of the page
 
+Quote Post
razrab83
сообщение Jan 3 2018, 10:26
Сообщение #42


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 5-05-17
Пользователь №: 96 902



Цитата(Quasar @ Dec 30 2017, 09:04) *
Локальная const переменная может инициализироваться в момент вызова функции и на стадии сборки неизвестна. Нечего класть во флеш. А вот static const и глобальная const переменная известны уже на стадии сборки.
Локальная const переменная на стадии сборки известна.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jan 3 2018, 10:53
Сообщение #43


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Код
int f(int a )
{
const int c = 5;
return a + c;
}
Цитата
Локальная const переменная на стадии сборки известна.

Сделали такой вывод потому, что можете видеть = 5 своими глазами? wink.gif

Выразимся точнее
Переменная c при любой настройке компилятора не ляжет во флеш потому, что у нее не static storage duration.
Переменная c вообще не займет никакой памяти(даже на стеке) при включении оптимизации.
Ознакомьтесь с
https://en.wikipedia.org/wiki/Constant_folding


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
razrab83
сообщение Jan 3 2018, 13:47
Сообщение #44


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 5-05-17
Пользователь №: 96 902



Цитата
Переменная c вообще не займет никакой памяти(даже на стеке)
Как раз таки переменная c займет память программ.

int f(int a )
{//при входе а копируем в аккумулятор
const int c = 5;//этой строки в коде вообще может не быть.
return a + c;//здесь будет выполнен может быть выполнен код типа такого add acc,#5, где #5 - это и есть наша const int c, и эта пятерка лежит во флешь.
}
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Jan 3 2018, 18:26
Сообщение #45


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Ну так мы же про размещение данных говорим вроде как.
Цитата
return a + c;//здесь будет выполнен может быть выполнен код типа такого add acc,#5, где #5 - это и есть наша const int c, и эта пятерка лежит во флешь.
Кстати говоря эта пятерка уже не переменная. Она станет частью инструкции в общем случае называемой Add Immediate. Т.е. не пятерка займет флеш, а инструкция у котой нужные биты будут равны пятерке.
Так что не будем путать тёплое с мягким. Во флеше пятерки нет - есть инструкция, куда она входит.

А если в вышеуказанном примере сделать const int с = 1 то вообще интересно может получится - вместо этого будет сгенерирована какая-нибудь инструкция
Код
inc acc
которая инкрементирует аккумулятор.
Тоже скажете, что константа во флеше?


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post

8 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th July 2025 - 05:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01495 секунд с 7
ELECTRONIX ©2004-2016