Форум программистов, компьютерный форум CyberForum.ru

Размер стэка и кучи - C++

Восстановить пароль Регистрация
 
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
06.12.2013, 08:12     Размер стэка и кучи #1
Насколько я знаю, куча и стек растут в направлении друг-дружки в общей куче. Однако, я с удивление обнаружил, что выделить локальный массив на > миллиона элементов типа int нельзя, а в куче (new[]) можно. Выходит, стэк ограничен? Но почему? Его можно сделать динамических поигравшись с опциями компилятора? Или, быть может, динамический стек => динамическая куча (в смысле, когда границы её меняются тоже) = много хуже производительность и, поэтому, такое не практикуют?

Добавлено через 12 часов 4 минуты
up-to-date?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kukurudza
104 / 85 / 6
Регистрация: 29.08.2012
Сообщений: 539
06.12.2013, 10:16     Размер стэка и кучи #2
https://www.google.ru/#newwindow=1&q...83%D1%87%D0%B0
ваш кэп
МаксимТ
 Аватар для МаксимТ
47 / 47 / 4
Регистрация: 17.08.2012
Сообщений: 225
06.12.2013, 10:17     Размер стэка и кучи #3
динамический стек приведет к частой смене регистра ESP, что как минимум недопустимо посередине функции,
т.к. функция может сохранять указатель на эту область, а она уже не валидная.
у каждой нити свой стек, ограниченый опред. размером(в винде 1 МБ по умолчанию).
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
06.12.2013, 16:28  [ТС]     Размер стэка и кучи #4
МаксимТ, что-то не вижу логики. Стек, по сути, и так "динамический", просто ограничем верхним значением. Так что если вдруг в область стала невалидна в динамическом стеке, она стала бы невалидна и в обычном стеке (эта область бы по прежнему принадлежала стэку, но там не было бы данных).
А ESP то что? Это у нас указатель стека. Он почти всегда меняется.. любая локальная переменная заносится в стек, любой вызов функции заносится в стек и так далее.

Добавлено через 25 секунд
Kukurudza, вроде как в правилах запрещенно выдавать подобные ссылки в гугл.
Да и вопрос у меня не "что такое стек и куча?"
Kukurudza
104 / 85 / 6
Регистрация: 29.08.2012
Сообщений: 539
06.12.2013, 17:01     Размер стэка и кучи #5
окей, расскажу.
думаю понятно что куча гораздо медленнее стека. потому что когда вам нужна память вы зовете аллокатор памяти, а он в свою очередь долбит менеджера памяти и уже менеджер памяти ищет вам место и дает, если оно есть.
как написал максим, у вас на стеке есть 1мб памяти, и этого хватает за глаза. если вы хотите большой объект, выделяйте память динамически. далее. иногда просто нельзя хотеть большой стек. например вы говорите: пусть у меня будет стек размером сто мегабайт. а я в свою очередь говорю, а мне надо чтобы программа выполнялась в 32 потока. каждому потоку по 100 метров уже огого.
вы хотите большой стек? приведите разумный пример зачем вам это нужно.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
06.12.2013, 17:23  [ТС]     Размер стэка и кучи #6
Kukurudza, иначе говоря, для того, чтобы можно было выделить каждому потоку по стеку, что не представляется возможным при динамическом размере??
Kukurudza
104 / 85 / 6
Регистрация: 29.08.2012
Сообщений: 539
06.12.2013, 17:37     Размер стэка и кучи #7
Если вы будете вместо стека использовать динамическую память то ваше приложение будет тормозить. ибо при каждом вызове функции, при передаче параметров, и выходе из предела видимости вы будете дергать менеджер памяти (ему надо дать вам память, а потом отдать ее системе), а это чревато тормозами.
Цитата Сообщение от Kukurudza Посмотреть сообщение
потому что когда вам нужна память вы зовете аллокатор памяти, а он в свою очередь долбит менеджера памяти и уже менеджер памяти ищет вам место и дает, если оно есть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2013, 17:46     Размер стэка и кучи
Еще ссылки по теме:

Повреждение кучи C++
C++ Получать различные начала кучи при создании кучи внутри цикла
C++ Размер бинарной кучи, процедура heapify

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
МаксимТ
 Аватар для МаксимТ
47 / 47 / 4
Регистрация: 17.08.2012
Сообщений: 225
06.12.2013, 17:46     Размер стэка и кучи #8
Цитата Сообщение от nexen Посмотреть сообщение
А ESP то что? Это у нас указатель стека. Он почти всегда меняется.. любая локальная переменная заносится в стек, любой вызов функции заносится в стек и так далее.
он меняется в пределах отведенного ему блока. но если сменится сам блок?
например ситуация когда за страницей стека выделена другая страница, а нам нужно уместить огромное число данных в стеке.
расширить стек не получился изза наложения виртуальных адресов.
а перенос его в другое виртуальное место - вызовет проблемы с адресами на прежний блок.
(речь о других функциях, которые хранят свои данные в стеке и ничего не подозревают о том что стек динамический).
можно конечно переписать функции, неоправданно увеличив код и понизив быстродействие. но оно надо?

Добавлено через 2 минуты
з.ы. под сменой стекового регистра я имел в виду смену самой страницы отведенной под стек, не так выразился
Yandex
Объявления
06.12.2013, 17:46     Размер стэка и кучи
Ответ Создать тему
Опции темы

Текущее время: 08:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru