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

 
 
> Про реентерабельность, малоизвестная фича GCC
_Pasha
сообщение Feb 15 2009, 23:51
Сообщение #1


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Только не говорите, что знали и часто пользуетесь! smile.gif

В общем, тем, кому позарез нада получить сабж, оказалось все очень просто

Код
void somefunc (volatile int param)

  volatile int local1;
  volatile char local2;
//body
local1 |= param;
return;
}


Как объявили все volatile - компилятор все, включая входные параметры, кладет в стек-фрейм.

И логика проста: без соответствующих оптимизаций функции генерятся реентерабельными. Volatile как-раз и отключает эту оптимизацию локальных переменных.

В общем, в мануале ГЦЦ настолько туманно это описано, что побудило поделиться радостной новостью.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Feb 16 2009, 08:26
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Вот условия реентерабельности:


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


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 16 2009, 08:51
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Rst7 @ Feb 16 2009, 10:26) *
Тут _Pasha имеет в виду не классическое понятие реетерабельности
Тогда неплохо бы приводить свое определение термина, раз уж оно расходится с общепринятым.
Цитата(Rst7 @ Feb 16 2009, 10:26) *
Т.е. выход из процедуры в произвольном месте через longjmp в прерывании и повторный заход в процедуру приведет к продолжению работы в прерванном месте.
Как там было у классиков? "и из обломков мотоцикла в следующий запойный период устроил стационарный двигатель, который был очень похож на настоящий, но не работал.". Перед выходом по longjump делается сохранение точки возврата при помощи setjump, которая совершенно корректно сохраняет на стеке все необходимые регистры в которых могут находиться локальные переменные.

Цитата(_Pasha @ Feb 16 2009, 09:10) *
Обеспечивает копию блока локальных переменных - одно из необходимых условий.
??? Необходимых кому? Почему одну копию, а не две или три?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Pasha   Про реентерабельность   Feb 15 2009, 23:51
- - Rst7   Вы меня, конечно, извините, но это - "ацкий б...   Feb 16 2009, 00:13
- - Сергей Борщ   Цитата(_Pasha @ Feb 16 2009, 01:51) Как о...   Feb 16 2009, 00:37
|- - _Pasha   Цитата(Сергей Борщ @ Feb 16 2009, 03:37) ...   Feb 16 2009, 07:10
|- - aesok   Цитата(_Pasha @ Feb 16 2009, 10:10) Обесп...   Feb 16 2009, 07:51
|- - demiurg_spb   Цитата(aesok @ Feb 16 2009, 10:51) В Атме...   Feb 16 2009, 09:10
|- - ReAl   Цитата(aesok @ Feb 16 2009, 09:51) В Атме...   Feb 16 2009, 09:56
|- - _Pasha   Цитата(Rst7 @ Feb 16 2009, 12:26) Тут _Pa...   Feb 16 2009, 23:30
|- - ReAl   Цитата(_Pasha @ Feb 17 2009, 01:30) Кодty...   Feb 17 2009, 07:50
|- - _Pasha   Цитата(ReAl @ Feb 17 2009, 10:50) возможн...   Feb 17 2009, 08:27
|- - ReAl   Цитата(_Pasha @ Feb 17 2009, 10:27) Если ...   Feb 17 2009, 16:40
|- - ReAl   Цитата(ReAl @ Feb 17 2009, 18:40) Не увер...   Mar 15 2009, 12:52
- - _Pasha   Цитата(Rst7 @ Feb 16 2009, 03:13) Куда бе...   Feb 16 2009, 08:46
- - Rst7   Че то я уже не пойму. Судя по предыдущей теме, ник...   Feb 16 2009, 09:08
- - Rst7   Лучше бы - не ядро править, а в компиляторы вменяе...   Feb 16 2009, 10:12
|- - ReAl   Цитата(Rst7 @ Feb 16 2009, 12:12) Лучше б...   Feb 16 2009, 20:42
- - Rst7   Нет, с плюсами конечно, неплохо получается. Но хот...   Feb 16 2009, 21:52
|- - ReAl   Цитата(Rst7 @ Feb 16 2009, 23:52) Нет, с ...   Feb 16 2009, 22:11
- - _Pasha   В общем, пока ясно одно: нельзя смешивать синхронн...   Feb 17 2009, 17:05
- - _Pasha   Еще одна ТАСКАЛКА (от слова task) получилась. Не...   Sep 13 2009, 07:01
|- - ReAl   Цитата(_Pasha @ Sep 13 2009, 10:01) Еще о...   Sep 13 2009, 09:21
|- - _Pasha   Цитата(ReAl @ Sep 13 2009, 12:21) Да, sys...   Sep 13 2009, 11:55
|- - ReAl   Цитата(_Pasha @ Sep 13 2009, 14:55) Имхо,...   Sep 13 2009, 17:02
|- - _Pasha   Цитата(ReAl @ Sep 13 2009, 20:02) Ну и чт...   Sep 13 2009, 20:19
|- - ReAl   Цитата(_Pasha @ Sep 13 2009, 23:19) Допус...   Sep 14 2009, 08:58
- - _Pasha   Понял, спасибо. Но не сразу Если локальных параме...   Sep 15 2009, 05:17
- - _Pasha   Кстати, о protothread parallel.h CODE #ifndef PAR...   Sep 15 2009, 06:42
- - _Pasha   Решил скрестить прототредоподобную кооперативку и ...   Dec 25 2009, 08:47


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th August 2025 - 08:14
Рейтинг@Mail.ru


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