LINUX.ORG.RU

Как узнать размер стека?


0

0

Можно ли из проги на С++ узнать размер стека? Просто нужно реализовать рекурсивные вычисления, и узнать насколько глубоко может зайти рекурсивная функция.

anonymous

man getrlimit

sS ★★★★★
()

Если более точно, то около min(getrlimit(RLIMIT_STACK)+getrlimit(RLIMIT_DATA), getrlimit(RLIMIT_AS)).

Реально чуть меньше, т.к. часть памяти уже занята.

Murr ★★
()
Ответ на: комментарий от Murr

Правда, для нитевого стека это всё не годится.
В этом случае можно поковырять как-нибудь так:

register unsigned long esp asm("esp");
И далее ковырять /proc/self/maps на предмет размера карты.

Правда, это не переносимо :(

Может кто-нибудь получше что предложит в этом случае ...

Murr ★★
()
Ответ на: Re: от Debugger

Re:

Для библиотеки GNU C: #include <sys/resource.h>

Размер общей памяти, использованной текущим процессом под стек
находится в элементе long ru_isrss структуры rusage,
заполняемой ф-ей int getrusage(int who, struct rusage* res);
где who = RUSAGE_SELF

Мягкий/жесткий предел размера стека
находится в элементе rlim_t rlim_cur/rlim_max структуры rlimit,
заполняемой ф-ей int getrlimit(int what, struct rlimit* res);
где what = RLIMIT_STACK

дальше - математика )

loki
()
Ответ на: Re: от Debugger

>По-моему, эти pthread_attr_getstacksize/setstacksize возвращают не совсем то. Как узнать attr для треда? Почему не то? По-моему как раз то...

Атрибут для нити ты сам создаешь pthread_attr_init (post factum не знаю). После этого ты можешь вытянуть либо default stack size через getstacksize или установить свой через setstacksize.

Murr ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.