|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.08.2017, 22:56 | #1 |
Заблокирован
Регистрация: 11.11.2016
Сообщений: 261
|
Стек в программах
Что можно сказать об использовании стека программами?
Как связан аппаратный стек и стеки потоков? Знает ли программа при старте, сколько ей нужно стековой памяти? Если размер сегментов памяти 64к, как стек может занимать до 10 мб, если он расположен в сегменте? Что происходит при переполнении стека? Почему он не может расти дальше как куча? |
23.08.2017, 23:32 | #2 | ||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Во время смены контекстов регистры перезагружаются, в том числе и отвечающие за аппаратный стек.
Программа знать не может ведь её поведение зависит от пользователя. Цитата:
Если говорить о x86 то там начиная с х386 сегменты по 4ГБ. А в 64-биной ещё больше. Цитата:
Если стек исчерпал всю доступною ему память то срабатывает защита она кидается исключение. А дальше цепочка обработчиков исключений пробуют восстановить последнее рабочее состояние программы, а если не получилось, то убивают программу.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
||
24.08.2017, 15:40 | #3 |
Заблокирован
Регистрация: 11.11.2016
Сообщений: 261
|
И я снова не понимаю: если аппаратный стек находится в сегменте SS, и сегменты в современных моделях памяти могут быть по 4 Гб и больше, то какой смысл несут фразы типа "компилятор студии выделяет стек размером 1 мб" и "стек на маках 512 кб"?
|
24.08.2017, 15:51 | #4 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
Цитата:
Если бы под стек выделялось 4 Гб, то Ваш "Hello world" сразу бы жрал минимум 4 Гб оперативы перманентно. Стек - гарантированно выделенное пространство. Если Вы превысили его размер - вон из хаты. |
|
24.08.2017, 15:52 | #5 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
|
24.08.2017, 16:22 | #6 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
|
24.08.2017, 16:42 | #7 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Aoizora
Цитата:
Хотя и сегменты по 4ГБ, но они перекрываютcя. Все сегменты отображаются на линейное арестное пространство размером 4 ГБ. И эти 4 Гб надо поделить на всё: ОС, динамическая память, стационарная память куча, код, стек, динамические библиотеке. Так ещё каждому процессу нужен свой стек. Да и скажу вам что и куча там не дна, а их несколько. Вот и встаёт вопрос как разделить память? Логично что ограничить размер, что-бы другим хватило памяти. Бог велел делиться. Да выделяет. Этот размер прописывается в исполняемом файле. При старте процесса ОС считывает эти данные из файла и выделяет столько памяти под стек сколько указано.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
|
24.08.2017, 18:43 | #8 |
Заблокирован
Регистрация: 11.11.2016
Сообщений: 261
|
>Этот размер прописывается в исполняемом файле
Где-то в PE-заголовках? |
24.08.2017, 19:04 | #9 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Нет, в произвольном месте.... Естественно, в заголовках.
|
24.08.2017, 19:51 | #10 |
Заблокирован
Регистрация: 11.11.2016
Сообщений: 261
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Дан стек символов. Преобразовать стек, оставив в нем из группы подряд идущих символов только один - Delphi | FunnyNeo | Общие вопросы Delphi | 0 | 09.04.2017 11:50 |
Стек и очередь. Задачи никогда не попадают в стек - Delphi | Exxodus | Помощь студентам | 1 | 05.04.2016 14:12 |
Реклама в программах | ivan_b | Общие вопросы Delphi | 9 | 15.01.2012 15:50 |
Использование '@' в программах | Studik | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 16.02.2011 20:08 |