|
Про реентерабельность, малоизвестная фича GCC |
|
|
|
Feb 15 2009, 23:51
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Только не говорите, что знали и часто пользуетесь!  В общем, тем, кому позарез нада получить сабж, оказалось все очень просто Код void somefunc (volatile int param) { volatile int local1; volatile char local2; //body local1 |= param; return; } Как объявили все volatile - компилятор все, включая входные параметры, кладет в стек-фрейм. И логика проста: без соответствующих оптимизаций функции генерятся реентерабельными. Volatile как-раз и отключает эту оптимизацию локальных переменных. В общем, в мануале ГЦЦ настолько туманно это описано, что побудило поделиться радостной новостью.
|
|
|
|
|
 |
Ответов
|
Feb 16 2009, 08:51
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
Сообщений в этой теме
_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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|