[16:50:17] <Kemet> valexey: скока в линуксе минимальный размер стека?
[16:50:42] <Kemet> помнится ты там чегото исследовал
[16:50:48] <valexey> скоко установишь в общем то
[16:50:59] <valexey> но оно ж по умолчанию не всё выделяет физически
[16:51:06] <valexey> то есть физически он растет по мере надобности
[16:51:42] <valexey> До некого лимита установленного переменной окружения
[16:51:48] <valexey> Либо этого лимита может не быть вовсе
[16:52:32] <valexey> # ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 16382
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) unlimited
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[16:55:13] <valexey> то есть выделяется обычно кусочками по 4 кб
[16:55:29] <Kemet> а stack size это там что - мак , мин или текущий
[16:55:42] <valexey> максимальный
[16:55:51] <valexey> можно сделать неограниченным
[16:56:06] <valexey> то есть просто с консоли. ничего и никого перекомпилировать не нужно
[16:56:12] <Kemet> т.е. сейчас у тебя стоит макс 8 кб нга стек для потока?
[16:56:30] <valexey> 8 Мб
[16:56:59] <Kemet> а, ну да
[16:57:32] <Kemet> минимум 4 кб?
[16:57:50] <valexey> минимальный максимальный размер стека?
[16:57:54] <valexey> или фактический?
[16:58:15] <Kemet> мин возможный
[16:58:41] <valexey> думаю 4 Кб. но не уверен.
[16:59:04] <Kemet> в интеле если страничная то мин 4 кб - это размер страницы
[16:59:04] <TRUE> меньше страницы не получится
[16:59:09] <TRUE> думаю
[16:59:10] <valexey> а, ну для своих потоков я делал 512 байт.
[16:59:29] <valexey> точнее для своих контекстов
[16:59:45] <Kemet> если гранулярность стоит не страница, а байты, то видимо sizeof(address)
[17:00:06] <valexey> но там вообще смешно - ты сам в куче (или где хочешь) выделяешь шмат памяти и инициализируешь контекст в нем
[17:00:43] <TRUE> 512 - это максимальный размер, так?
[17:00:55] <valexey> я смотрел - в линуксе получалось совсем мало. буквально несколько байт.
[17:01:03] <valexey> (в 32битном линуксе)
[17:01:20] <TRUE> при учёте, что стек расти в размере не будет?
[17:01:40] <valexey> эмм.. это уже зависит от твоего приложения
[17:01:49] <valexey> как организуешь, так и будет.
[17:02:36] <valexey> у меня там вообще была хитрая схема с созранением и копированием контекстов из маленьких "стеков" в большой, если требуется что-то активное на стеке поделать
[17:03:06] <valexey> еще можно устроить стек в виде цепочки двусвязных блоков (двусвязный список)
[17:03:08] <valexey> ну и так далее
[17:04:15] <valexey> но еще раз - эти эксперименты были не с главным контекстом и главным стеком про который линух что-то там знает. это были makecontext/setcontext, Память под контекст может быть где угодно. ТО есть просто в куче например.
[17:04:36] <TRUE> копирование из малого в большой - понятно. Для приложения такой стек остаётся цельным. А как со связным списком? Как в него пихать данные? На уровне процессора уже, ведь, не пройдёт...
[17:04:41] <valexey> Что и как конкретно лимитирует и регулирует ulimit я точно сейчас не скажу.
[17:04:54] <TRUE> а, ну ясно
[17:05:22] <valexey> TRUE: это нужно на уровне прелюдии функции кое-что менять в кодогенерации. gcc это умеет.
[17:06:02] <valexey> Именно так работает Go например.
[17:06:16] <valexey> точнее его goroutine
[17:07:00] <TRUE> но так должно быть для каждой функции, так? То есть, несколько функций в один шмат обычно свои данные не складывают.
[17:08:01] <valexey> складывают, если оно туда помещается
[17:08:16] <valexey> размер фрейма для каждой функции известен на этапе компиляции
[17:12:56] <Kemet> почитал доку, малость - размер сегмента или от байта или от страницы(4кб), а размер стека таки должен быть выровнен
[17:13:57] <valexey> Kemet: а что ты там такое в линуксе делаешь?
[17:13:58] <Kemet> srtcontext этот сегменты и устанавливает
[17:14:25] <Kemet> valexey: изучаю )
[17:14:44] <valexey> :-)
[17:15:33] <Kemet> по\росто в А2 видимо стек по страницам выделяется - лимит 128 кб, хотелось узнать в лине страничная или байтовая схема применяется
[17:17:50] <valexey> 128 Кб.. Что-то как-то совсем мелко
[17:19:09] <Kemet> хе так на поток, зачем потоку шибко большой стек, куча есть для пользования
[17:21:20] <valexey> для математики бывает полезно
[17:21:43] <valexey> алсо мне нужен большой максимум для стека, а не большой стек сразу
[17:26:41] <Kemet> зачем для математики мегабайты стека
[17:27:13] <valexey> для массивов промежуточных вычислений на стеке
[17:27:21] <valexey> чтобы не дергать лишний раз менеджер памяти
[17:27:26] <Kemet> ты стек используешь не по назначению!
[17:27:42] <valexey> ну и чтобы фрагментация памяти не росла
[17:32:40] <Kemet> размер сегмента ограничан 20-ти разрядным числом
[17:34:05] <valexey> э?
[17:34:56] <valexey> ну, то есть мегабайтом.
[17:35:05] <valexey> а где это так?
[17:35:23] <valexey> и, главное, почему? (вот в msp430 нет никаких сегментов, и все счастливы)
[17:35:35] <valexey> да и в арме я сегментов не упомню
[17:37:33] <Kemet> в и386Ю но там есть бит гранулярроности, в байтах это или в страницах
[17:38:17] <valexey> брр
[17:38:34] <valexey> не люблю x86. Какой-то один сплошной геморрой и лишние сущности
[17:38:38] <Kemet> наследие х86
[17:38:55] <valexey> угу
[17:39:17] <Kemet> расширение с обратной совместимостью
[17:39:46] <Kemet> поэтому управляющие структуры выглядят мягко говоря странно
[17:40:15] <valexey> брр
[17:42:13] <valexey> хотеть в десктопном мейнстриме процессор без тяжкого наследия.
[18:56:47] <Kemet> .
[19:03:42] <valexey> !
[21:02:25] <valexey> гы. скайп собственное виде специально зеркалирует, сцуко
[21:02:35] <valexey> а я тут баг в своей виртуальной камере ищу