-
- Вот здесь идея описана. Оно косячное, но важна идея. - LightElf(06.11.2015 19:48, ссылка)
- Прикольно. Я вчера по alloca setjmp longjmp несколько материалов нагуглил, этот в том числе. Но вот что меня смушает.... Evgeny_CD(539 знак., 07.11.2015 00:32)
- 1) Вытесняющие оси требуют больше стека. Задача может быть прервана в любой момент, потому шедулер вынужден сохранять все регистры. В кооперативной осе задача переключается только в определенные моменты, компилятор знает о них и может правильно LightElf(305 знак., 07.11.2015 02:29)
- Кооперативная ОС нужна только для одного -- планировщик (большие биг-луп программы слишком много времени тратят на проверку условий в цикле). Но он легко заменяется чем-то вроде libevent. Если срок разработки ПО менее года и работает пара человек fk0(202 знак., 07.11.2015 03:06)
- Ты несёшь полнейшую чушь. Вытесняющая ОС стека больше аж на три десятка байт требует? Да у тебя недетерменированное дерево вызовов заставит сходу полкилобайта на каждый стек отдать. - fk0(07.11.2015 03:03)
- 8 килобайт стека хватит каждому - Linus kernel(07.11.2015 15:19, )
- qsort() неудачно вызови... - fk0(07.11.2015 15:22)
- Это который? - qsortk :)(07.11.2015 15:29, )
- qsort() неудачно вызови... - fk0(07.11.2015 15:22)
- не фантазируй. 10 задачек жрут от 100 до 200 байт стека. больше всех толстая матзадача с тучей вызовов матфункций (операции с кватернионами) и много локальных структур (кватернионов и матриц). есть и такиие задачи, что в сотню байт вкладываются. - Mahagam(07.11.2015 13:59)
- Ты ещё объясни как ты в 20-байтном стеке прерывание обрабатывать будешь, бугага. - fk0(07.11.2015 14:46)
- Прерывание в своем стеке, это правильно в любом случае. - Evgeny_CD(07.11.2015 14:49)
- Это ты не фантазируй. Первая попавшаяся функция 200 байт сожрать может и ещё попросить. Это просто у тебя задачки такие, отдалённые от реалий современного программирования. - fk0(07.11.2015 14:38)
- а реалии современного программирования какие? сячкать говнокод жрущий память? я тебе привёл данные по реальному проекту вообще-то. - Mahagam(07.11.2015 16:10)
- 20 байт стека на задачу? Всё ясно с твоими проектами. - fk0(07.11.2015 16:45)
- Тебе информация для справки: в средней программе на linux 16кБайт стека не хватает, похрену какие там задачки, это просто некий усреднённый стек для усреднённой задачи, с нормальным программированием (никто не говорит "мы не используем fk0(30 знак., 07.11.2015 14:40)
- а реалии современного программирования какие? сячкать говнокод жрущий память? я тебе привёл данные по реальному проекту вообще-то. - Mahagam(07.11.2015 16:10)
- Ты ещё объясни как ты в 20-байтном стеке прерывание обрабатывать будешь, бугага. - fk0(07.11.2015 14:46)
- 8 килобайт стека хватит каждому - Linus kernel(07.11.2015 15:19, )
- 1) Вытесняющие оси требуют больше стека. Задача может быть прервана в любой момент, потому шедулер вынужден сохранять все регистры. В кооперативной осе задача переключается только в определенные моменты, компилятор знает о них и может правильно LightElf(305 знак., 07.11.2015 02:29)
- Прикольно. Я вчера по alloca setjmp longjmp несколько материалов нагуглил, этот в том числе. Но вот что меня смушает.... Evgeny_CD(539 знак., 07.11.2015 00:32)
- Завтра, оно дома. Там setjmp + alloca. Исходный стек (на котором main вызвана) нарезается на куски и раздается потокам. - LightElf(05.11.2015 19:52 - 19:54)
- Все равно с переносимостью будут проблемы. setjmp не является универсальной на всех платформах. Т.е. не намного лучше асмового кода. - Evgeny_CD(05.11.2015 20:05)
- Не говори о чём не знаешь с высоты менагерского полёта. Я как проф. программист тебе скажу, что alloca() и setjmp() как раз и являются кросплатформенным способом выкрутиться из ситуации без знания регистров и ассемблера. Будь там операционка (т.е. fk0(283 знак., 06.11.2015 00:47)
- Скажи мне, профессиональный программист, WinAVR -> PIC24 -> PIC32 -> GCC ARM Cortex | IAR ARM Cortex alloca() и setjmp() точно ли есть, и одинаково ли работают? - Evgeny_CD(06.11.2015 01:37)
- alloca нет, потому как оно оказывается не входит в стандарт. setjmp есть везде, потому что стандарт. Поведение опять-таки описано в стандарте. - LightElf(06.11.2015 19:50)
- Не важно одинаково ли они работают, но они должны быть и типично есть в любом C компиляторе после 1989 года. Другое дело, что на PIC24, могу сказать, оно жрёт неадекватно (порядка 256 байт) памяти. Но это уже детали. - fk0(06.11.2015 12:03)
- Как пример -> - Evgeny_CD(06.11.2015 01:44, ссылка)
- Скажи мне, профессиональный программист, WinAVR -> PIC24 -> PIC32 -> GCC ARM Cortex | IAR ARM Cortex alloca() и setjmp() точно ли есть, и одинаково ли работают? - Evgeny_CD(06.11.2015 01:37)
- Не говори о чём не знаешь с высоты менагерского полёта. Я как проф. программист тебе скажу, что alloca() и setjmp() как раз и являются кросплатформенным способом выкрутиться из ситуации без знания регистров и ассемблера. Будь там операционка (т.е. fk0(283 знак., 06.11.2015 00:47)
- Не понимаю, чем память в куче хуже чем на стеке? - =AlexD=(05.11.2015 19:59)
- Наверное, задумка создателей этой функции была автоматическое освобождение памяти, но реальность оказалась мрачнее мечтаний :( - Evgeny_CD(05.11.2015 20:01)
- 1) Выделение памяти на стеке потокобезопасно сразу, без всяких выкрутасов LightElf(57 знак., 07.11.2015 02:35)
- Задумка создателей в том, что C не предоставляет другого способа именить $SP. - fk0(06.11.2015 00:48)
- Не видел требований что бы это было сделано через изменение $SP. Честно говоря не представляю как можно менять $SP, там же все локальные переменные относительно него адресуются, вся адресация нарушится. Либо надо выделять еще один регистр, которых AlexBi(13 знак., 06.11.2015 11:32)
- Это проблема автора компилятора и рантайма. - LightElf(06.11.2015 19:53)
- Для отдельного потока, треда, задачи, процесса, нужен свой стек, значит нужно переключать стеки и менять $SP. Что тут непонятного? - fk0(06.11.2015 12:06)
- Вот например кусок кода: AlexBi(240 знак., 06.11.2015 12:37)
- Не видел требований что бы это было сделано через изменение $SP. Честно говоря не представляю как можно менять $SP, там же все локальные переменные относительно него адресуются, вся адресация нарушится. Либо надо выделять еще один регистр, которых AlexBi(13 знак., 06.11.2015 11:32)
- Наверное, задумка создателей этой функции была автоматическое освобождение памяти, но реальность оказалась мрачнее мечтаний :( - Evgeny_CD(05.11.2015 20:01)
- Ксения права -> - Evgeny_CD(05.11.2015 19:56, ссылка)
- Все равно с переносимостью будут проблемы. setjmp не является универсальной на всех платформах. Т.е. не намного лучше асмового кода. - Evgeny_CD(05.11.2015 20:05)
- Вот здесь идея описана. Оно косячное, но важна идея. - LightElf(06.11.2015 19:48, ссылка)