LINUX.ORG.RU

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


0

0

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

anonymous

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

man getrlimit

sS ★★★★★ ()

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

Именно getrlimilt

LONGOBARD ()

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

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

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

Murr ★★ ()
Ответ на: Re: Как узнать размер стека? от Murr

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

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

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

Re: Re:

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

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

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