Как узнать размер стека?
Можно ли из проги на С++ узнать размер стека? Просто нужно реализовать рекурсивные вычисления, и узнать насколько глубоко может зайти рекурсивная функция.
Как узнать размер стека?
Re: Как узнать размер стека?
Re: Как узнать размер стека?
Если более точно, то около min(getrlimit(RLIMIT_STACK)+getrlimit(RLIMIT_DATA), getrlimit(RLIMIT_AS)).
Реально чуть меньше, т.к. часть памяти уже занята.
Re: Re: Как узнать размер стека?
Правда, для нитевого стека это всё не годится.
В этом случае можно поковырять как-нибудь так:
register unsigned long esp asm(«esp»);
И далее ковырять /proc/self/maps на предмет размера карты.
Правда, это не переносимо 🙁
Re: Re: Re: Как узнать размер стека?
Хотя вот для POSIX Threads есть pthread_attr_getstacksize/pthread_attr_setstacksize.
По-моему, эти pthread_attr_getstacksize/setstacksize возвращают не совсем то. Как узнать attr для треда?
Для библиотеки GNU C: #include
Размер общей памяти, использованной текущим процессом под стек
находится в элементе 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
Re: Re:
>По-моему, эти pthread_attr_getstacksize/setstacksize возвращают не совсем то. Как узнать attr для треда? Почему не то? По-моему как раз то.
Атрибут для нити ты сам создаешь pthread_attr_init (post factum не знаю). После этого ты можешь вытянуть либо default stack size через getstacksize или установить свой через setstacksize.
как определить размер стека потока (имеется специальная функция, библиотека pthread)
Друзья! Какой день воюю со стандартом POSIX
Итак, надо получить размер стека потока. Тупо.
1)Для этого существует функция
Но, во-первых, получается херь какая-то- я сам устанавливаю размер стека, с тем, чтобы его получить. Гениально. А во вторых, и это главное, поток спокойно выполняется с размером стека равным 0. Это выше моего понимания.
Но мы можем объявить поток безо всякой переменной attr! И тогда там создастя стек с размером ПО УМОЛЧАНИЮ! Как его найти? Покрыто мраком всё. А вот простой корректный код и как найти размер стека без того, чтобы самому НЕ ОБЪЯВЛЯТЬ ЕГО- я ума не приложу. Меж тем код работает, стек то есть существует.
Спасибо, кто откликнется
Добавлено через 9 часов 12 минут
подымаю тему в связи с большой общественной значимостью.
Pthread функция потока внутри класса
Нужно чтобы функция pthread_create принимала на входе функцию-член класса, в котором я вызываю.
Как узнать, что поток закончился (библиотека pthread)?
Друзья! Есть ли какая-нибудь pthread-функция, которая вызывается в основном потоке X и показывает-.
Определить адрес начала стека потока
Приветствую! Суть задачи такова: для любого потока нужно уметь найти адрес его стека и размер.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Приоритет потока (pthread)
Доброго времени суток! Есть такой код:#include
библиотека pthread.h в Code::Blocks
не могу найти как подключить библиотеку pthread.h в Code::Blocks. Помогите,пожалуйста, кто знает.
Изолирование данных родительского потока от дочернего в pthread
Сабж. Как сделать так, что бы в дочернем потоке не были видны данные родительского потока? Для.

Подскажите бесконечную простую функцию как синус и т.д. Чтобы кривая была гладкая и похожа на эту.
Получить размер стека и установить размер стека атрибута потока в C
// получить размер стека
int pthread_attr_getstacksize( const pthread_attr_t* restrict attr,
size_t * restrict stacksize);
// установить размер стека
int pthread_attr_setstacksize(pthread_attr_t* attr, size_t stacksize);
,
pthread_attr_getstacksize ():
Используется для получения размера стека потоков. Атрибут stacksize дает минимальный размер стека, выделенный стеку потоков. При успешном запуске это дает 0, иначе дает любое значение.
Первый аргумент — принимает атрибут pthread.
Второй аргумент — принимает переменную и дает размер атрибута потока.
pthread_attr_setstacksize ():
Используется для установки размера стека новых потоков. Атрибут stacksize дает минимальный размер стека, выделенный стеку потоков. При успешном запуске он дает 0 в противном случае, если ошибка дает какое-либо значение.
Первый аргумент — принимает атрибут pthread.
Второй аргумент — принимает размер нового стека (в байтах)
#include
#include
#include
// for принимает размер стека потоков
// он получает размер стека потоков и дает
// значение в переменной stksize
// выводим текущий размер стека потоков
// затем устанавливаем размер стека новых потоков
// выводим новый размер стека
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Как узнать размер доступного стекового пространства?
Мы все знаем, что стек растет вниз, так что на самом деле это простое предположение, что если мы найдем адрес прошлой объявив переменную, мы получим наименьший адрес в стеке, поэтому мы можем просто предположить, что этот адрес будет нашим остаточным доступным стеком.
И я сделал это, и я получил просто огромный адрес <0x000000dc9354f540>= <947364623680>мы знаем, что этот стек растет вниз, и мы знаем, что мы не можем опуститься ниже 0.
так немного математики:
Я тестирую его и, очевидно, получаю исключение переполнения стека после выделения дополнительных 2 МБ в стеке:
И вот мой вопрос пришел WTF это, и как я могу получить мой фактический размер стека?
Решение
Поскольку у вашего вопроса есть тег «visual-studio-debugging», я предполагаю, что вы используете windows.
Сначала вы должны получить текущий указатель стека. Либо получить адрес локальной фиктивной переменной (как вы сделали сейчас), либо по raw asm читать esp/rsp или получить адрес локальной фиктивной переменной (как вы это сделали сейчас) или получить регистр ЦП через вызов Win32 API GetThreadContext ).
Теперь, чтобы узнать доступный размер стека, вы можете использовать VirtualQuery чтобы увидеть начальный адрес этой области виртуальной памяти (или базовый адрес выделения). В основном вычитание этих указателей даст вам оставшийся размер стека (с точностью до размера текущего кадра стека).
Это не имеет никакого отношения к «стеку на вашем компьютере». Это о виртуальный адресное пространство, которое не имеет ничего общего с физическим хранилищем (ОЗУ + файлы подкачки), доступным в системе.
Размер стэка и кучи
Насколько я знаю, куча и стек растут в направлении друг-дружки в общей куче. Однако, я с удивление обнаружил, что выделить локальный массив на > миллиона элементов типа int нельзя, а в куче (new[]) можно. Выходит, стэк ограничен? Но почему? Его можно сделать динамических поигравшись с опциями компилятора? Или, быть может, динамический стек => динамическая куча (в смысле, когда границы её меняются тоже) = много хуже производительность и, поэтому, такое не практикуют?
Добавлено через 12 часов 4 минуты
up-to-date?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Размер кучи
С помощью какой библиотечной ф-ции или как узнать размер кучи в языке Си?
Размер бинарной кучи, процедура heapify
Не могу понять, каким образом надо работать с параметром «размер кучи» при реализации сортировки.
Получать различные начала кучи при создании кучи внутри цикла
Можно ли как-то такое провернуть, чтобы на каждой итерации цикла получались различные адреса.
МаксимТ, что-то не вижу логики. Стек, по сути, и так «динамический», просто ограничем верхним значением. Так что если вдруг в область стала невалидна в динамическом стеке, она стала бы невалидна и в обычном стеке (эта область бы по прежнему принадлежала стэку, но там не было бы данных).
А ESP то что? Это у нас указатель стека. Он почти всегда меняется.. любая локальная переменная заносится в стек, любой вызов функции заносится в стек и так далее.
Добавлено через 25 секунд
Kukurudza, вроде как в правилах запрещенно выдавать подобные ссылки в гугл.
Да и вопрос у меня не «что такое стек и куча?»
Добавлено через 2 минуты
з.ы. под сменой стекового регистра я имел в виду смену самой страницы отведенной под стек, не так выразился
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Размер кучи
Доброго времени суток Подскажите пожалуйста, почему если снять комментарии со строк(обратиться к.
Размер кучи в TP70
Добрый день. Программе, написанной на ТР70, не хватает динамической памяти. Стал копаться, вставил.

Заголовок передает всю суть вопроса, как узнать размер оставшейся кучи в stm32? Необходимо узнать.




