|
Вопрос по volatile |
|
|
|
 |
Ответов
|
Jan 19 2017, 07:37
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Укушенный воблой @ Jan 18 2017, 21:31)  А если я работаю с переменной через указатель на неё, то что? Я должен такую переменную объявлять как волатайл? Ведь компилятор не может проследить все случаи где я получаю доступ к переменной через указатель на неё Попробуйте как-нить написать: c = *p; ...//пара операций if (*p) ... увидите что при наличии оптимизации, компилятор часто не будет делать второе чтение из памяти, а использует копию переменной в регистре, ранее прочитанную. Он не знает и не должен знать, что Вы возможно в параллельной задаче ОС или ISR можете её изменить. Об этом должен думать программист. Тем более если такое написано в теле цикла - компилятор тем более *p считает в регистр и всё время цикла будет её там хранить. А вот уже если в этом теле цикла вы сделаете *p++, то тут поведение компилятора различно: если в этом цикле нет обращений через указатели к памяти, и стоит оптимизация "по скорости" то скорей всего он и модификацию выполнит в регистре, а сохранение в память - уже после выхода из цикла. Если же обращения есть, то может сделать и так и так - в зависимости от компилятора от степени оптимизации. К тому же в некоторых компиляторах для указателей можно задавать специальные модификаторы, говорящие что работа с данными через них не имеет "side effects", т.е. - что указатель указывает на свои отдельные данные, которые никак не пересекаются с данными других указателей и областями хранения переменных используемых в этой функции. Это позволяет компилятору выполнять оптимизацию работы с этими указателями по-максимуму, например: загрузка данных из области этих указателей может выполняться заранее (например в коде есть несколько обращений: p[1], p[2], p[3],... размазанных по циклу, компилятор может загрузить эти данные сразу в одном месте или даже вообще до входа в цикл или загружать данные для следующего прохода цикла в предыдущем проходе, менять кол-во проховдов цикла, частично или полностью разворачивать его, делая предварительную загрузку, а сохранение в такие указатели вообще - в последующих проходах цикла). Это позволяет конвееризировать обработку данных, что очень ярко видно на процессорах, умеющих распараллеливать вычисления в несколько потоков, имеющих несколько АЛУ, например - DSP. DSP-шные оптимизаторы выполняют как правило такое преобразование кода, которое и не снилось на ARM-системах. Так как там в разы больше регистров и способов адресации памяти.
|
|
|
|
Сообщений в этой теме
Alt.F4 Вопрос по volatile Jan 14 2017, 09:00 Lagman Для 51 в кейле такое объяснение http://www.keil.co... Jan 14 2017, 18:17 XVR Чтения этих переменных делается напрямую или тоже ... Jan 15 2017, 20:39 Alt.F4 Если вообще смотреть на проблемы в примерах, то он... Jan 15 2017, 21:05 jcxz Цитата(Alt.F4 @ Jan 14 2017, 12:00) В оче... Jan 16 2017, 13:19 Укушенный воблой Цитата(jcxz @ Jan 16 2017, 14:19) Атомарн... Jan 18 2017, 16:14  zltigo Цитата(Укушенный воблой @ Jan 18 2017, 18... Jan 18 2017, 17:06   Baser Цитата(zltigo @ Jan 18 2017, 19:06) Никак... Jan 18 2017, 18:09 SlavaV Тогда и я своё видение изложу
В документацию не л... Jan 16 2017, 14:43 jcxz Цитата(SlavaV @ Jan 16 2017, 17:43) PS а ... Jan 16 2017, 15:00 SlavaV Переменная не "путешествует" во время вы... Jan 16 2017, 15:14 jcxz Цитата(SlavaV @ Jan 16 2017, 18:14) Перем... Jan 16 2017, 15:41 SlavaV int x;
void f()
{
x += N1; //1
...
x += N2; //2... Jan 16 2017, 15:55 Сергей Борщ QUOTE (SlavaV @ Jan 16 2017, 17:55) вы сч... Jan 16 2017, 16:44 gerber Цитата(SlavaV @ Jan 16 2017, 18:55) вы сч... Jan 16 2017, 16:55  jcxz Цитата(gerber @ Jan 16 2017, 19:55) А в в... Jan 16 2017, 17:40 Alt.F4 Снова приведен пример, как и во всех статьях. В ре... Jan 16 2017, 17:10 XVR Пример (https://gcc.godbolt.org/)
Код (компилятор ... Jan 16 2017, 19:03 Alt.F4 Цитата... Дальше например можете в цикле ждать ког... Jan 17 2017, 07:57 jcxz Цитата(Alt.F4 @ Jan 17 2017, 10:57) Если ... Jan 17 2017, 14:01 RobFPGA Приветствую!
Не забывайте о том что не только... Jan 17 2017, 14:20 Alt.F4 jcxz, вот именное такие: "например можете в ц... Jan 17 2017, 21:45 jcxz Цитата(Alt.F4 @ Jan 18 2017, 00:45) Значи... Jan 18 2017, 08:39 Kabdim А если включить lto то оптимизироваться будет совс... Jan 18 2017, 08:44 Alt.F4 jcxz, сейчас я тоже начну вас оскорблять
Изменять... Jan 18 2017, 10:53 jcxz Цитата(Alt.F4 @ Jan 18 2017, 13:53) jcxz,... Jan 18 2017, 11:12 RobFPGA Приветствую!
Цитата(Alt.F4 @ Jan 18 2017... Jan 18 2017, 11:23 Alt.F4 jcxz, читаю "на входе в эту функцию, компилят... Jan 18 2017, 11:24 RobFPGA Приветствую!
Цитата(Alt.F4 @ Jan 18 2017,... Jan 18 2017, 11:49 Baser Цитата(Alt.F4 @ Jan 18 2017, 13:24) jcxz,... Jan 18 2017, 11:52 jcxz Цитата(Alt.F4 @ Jan 18 2017, 14:24) И как... Jan 18 2017, 14:05 Alt.F4 RobFPGA, думаю, если буфер объявлен глобально, то ... Jan 18 2017, 12:33 Baser Цитата(Alt.F4 @ Jan 18 2017, 14:33) Ну ка... Jan 18 2017, 14:06  RobFPGA Приветствую!
Цитата(Baser @ Jan 18 2017, ... Jan 18 2017, 15:08 aiwa Цитата(Alt.F4 @ Jan 17 2017, 23:45) RobFP... Jan 18 2017, 13:54 DASM Господа никогда не понимал таких споров. Процесс в... Jan 18 2017, 14:32 Baser Цитата(RobFPGA @ Jan 18 2017, 17:08) Прос... Jan 18 2017, 16:38 aiwa Цитата(Укушенный воблой @ Jan 18 2017, 20... Jan 18 2017, 22:36 Укушенный воблой Цитата(aiwa @ Jan 18 2017, 22:36) Правила... Jan 19 2017, 04:18  XVR Цитата(Укушенный воблой @ Jan 19 2017, 07... Jan 19 2017, 06:34   Укушенный воблой Цитата(XVR @ Jan 19 2017, 06:34) Нет. Ком... Jan 19 2017, 17:24    XVR Цитата(Укушенный воблой @ Jan 19 2017, 20... Jan 19 2017, 19:21     Укушенный воблой Цитата(XVR @ Jan 19 2017, 20:21) Так не б... Jan 19 2017, 19:42      XVR Цитата(Укушенный воблой @ Jan 19 2017, 22... Jan 19 2017, 19:52 Alt.F4 jcxz, а мне Ваши примеры напоминают троллинг, повт... Jan 19 2017, 06:54 jcxz Цитата(Alt.F4 @ Jan 19 2017, 09:54) jcxz,... Jan 19 2017, 07:09 jcxz Цитата(Alt.F4 @ Jan 19 2017, 09:54) Да и ... Jan 19 2017, 07:18 Сергей Борщ QUOTE (Alt.F4 @ Jan 19 2017, 08:54) Пока ... Jan 19 2017, 07:11 Alt.F4 ЦитатаОчевидно что Вы и читать исходники не умеете... Jan 19 2017, 07:32 Укушенный воблой Вы ошибаетесь.
Просто я не хочу обсуждать вкус уст... Jan 19 2017, 20:30 XVR Цитата(Укушенный воблой @ Jan 19 2017, 23... Jan 20 2017, 09:40  AHTOXA Цитата(XVR @ Jan 20 2017, 14:40) Требую п... Jan 20 2017, 11:19   zltigo Цитата(AHTOXA @ Jan 20 2017, 13:19) Ну вы... Jan 20 2017, 20:21 aiwa Цитата(Alt.F4 @ Jan 19 2017, 09:32) Я не ... Jan 20 2017, 04:17 jcxz Цитата(aiwa @ Jan 20 2017, 07:17) res_yes... Jan 20 2017, 10:03 Укушенный воблой Цитата(aiwa @ Jan 20 2017, 05:17) 2. втор... Jan 21 2017, 09:09  XVR Цитата(Укушенный воблой @ Jan 21 2017, 12... Jan 23 2017, 10:13 ViKo Побейтесь еще за пустой мешок! Jan 20 2017, 09:57 aiwa Цитата(jcxz @ Jan 20 2017, 12:03) Здесь к... Jan 20 2017, 10:28 sigmaN Цитата(Сергей Борщ @ Jan 19 2017, 10:11) ... Jan 22 2017, 17:59 Укушенный воблой Нет.
Если с умом подходить к разработке программ... Jan 25 2017, 15:51
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|