· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Сколько памяти, максимально, можно выделить в стеке под текстовый буфер?

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Апр 22, 2004 13:24:28

Сабж, собственно..
Есть какие-то рекомендации, ограничения?


Дата: Апр 22, 2004 14:09:09

Если в ядре, то мало... очень мало... очень мало. А лучше вообще для этого в стеке память не выделять.

Если в юзере, то:
http://www.wasm.ru/forum/index.php?action=vthread&forum=4&topic=2098

http://www.wasm.ru/forum/index.php?action=vthread&forum=5&topic=2323

http://www.wasm.ru/forum/index.php?action=vthread&forum=3&topic=4615

Asterix, тебе тоже - читать Рихтера :)


Дата: Апр 22, 2004 14:16:03 · Поправил: BLOb

Не знаю, сколько можно выделить максимально (память под стек же динамически выделяется по мере его роста), но я
в делфи регулярно описывал локальные массивы ~10K и в исходниках его runtime и VCL выделение ~4K - обычное дело.
Если будешь выделять руками >4K (sub esp, size) - главное через guard page не пролететь. Делфи при >4K делает в цикле вроде этого:
add esp,-4092
push ecx

:-)
Пока отвечал, Four-F интересные ссылки положил


Дата: Апр 22, 2004 14:32:19

Спасибо, Four-F.
Я честно пытался искать по форуму, но как-то не срослось, видимо ключевые слова для поиска выбирал не те..


Дата: Апр 22, 2004 14:56:34

Почитал все эти умные рассуждения, но решил переспросить совсем по тупому,
push ebp
mov ebp, esp
sub esp, X


Скольким байтам максимально может быть равен этот X чтоб ситуация не выходила из под контроля и винде не приходилось использовать всяческие защитные механизмы.
sub esp, 4096 ; Это нормально?


Дата: Апр 22, 2004 15:29:21 · Поправил: BLOb

sub esp, 4096 ; Это нормально?

В худшем случае после этого esp будет указывать за guard page, и, скажем,
какой-нибудь call вызовет exception
Надо sub esp, 4092; push eax
Здесь esp в любом случае указывает или на уже выделенную страницу или на guard page и push eax в нее тыркнется,
чем вызовет автоматическое выделение новой страницы
Или обратиться после sub esp, 4096 к памяти [esp+xxx], xxx меньше 4K


Дата: Апр 22, 2004 16:15:19

[ Asterix: Почитал все эти умные рассуждения, но решил переспросить совсем по тупому,... ]

Т.е. ты не хочешь Рихтера читать. :)


Дата: Апр 22, 2004 17:36:26

Читаю, но не уверен в правильном понимании прочитанного ;-)


Дата: Апр 23, 2004 11:21:05

Asterix - прошу прощения за тупой вопрос, но чем heap не нравится...?


Дата: Апр 23, 2004 11:37:28

Нравиться, просто я хотел знать что можно сделать со стеком.


Дата: Апр 23, 2004 11:49:41

[ Asterix: Читаю, но не уверен в правильном понимании прочитанного ;-) ]

Там в разделе "A Thread's Stack" даже картинки показывают :) Тебе главное за guard page не заступить.


Дата: Апр 23, 2004 13:21:51

[ Four-F: Там в разделе "A Thread's Stack" даже картинки показывают :)]

Ага :-) Но я теперь уже точно уяснил что до 4kб можно смело выделять, обычно мне требуется ещё меньше ;-)


Дата: Май 12, 2004 09:18:03 · Поправил: Oleg_SK

Asterix
Но я теперь уже точно уяснил что до 4kб можно смело выделять...
IMHO, это не так! Смело можно выделять не больше чем N байтов. Формула вычисления значения N, следующая:
N = ESP - M, где M - адрес ближайшей нижней границы страницы (т.е. кратный: 4096). В противном случае, ты рискуешь нарваться на проблемы%))


Дата: Май 12, 2004 15:04:41

Asterix прав. Именно до 4kб. Т.к. максимум ты рискуешь нарваться на сторожевую страницу. В этом случае она будет сделана доступной для чтения, а сторожевая сместиться вниз, если конечно это не предел стека. Тогда уже проблемы.


Дата: Май 12, 2004 15:08:18

Four-F
Не зря я этот пост сделал! Не зря... Хотя и неправ оказался, но зато узнал от вас то, до чего сам не допер!

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.053