Ошибка памяти, если программа exec'd больше предыдущей - PullRequest
2 голосов
/ 18 ноября 2011

Очевидно, что когда программа выполняется exec'd, Kernal в основном заменяет текущую на exec, и она использует то же самое адресное пространство для выполнения. Если более новая программа имеет небольшой размер, то проблем не будет.Мой вопрос здесь заключается в том, что происходит, когда мы исполняем программу, размер которой превышает адресное пространство более старой.

1 Ответ

2 голосов
/ 18 ноября 2011

В Linux адресное пространство процесса, выполняющего exec (), заменяется новым, достаточно большим для исполняемого двоичного файла. Я думаю, то же самое верно и для других операционных систем. И это разумно. Если адресное пространство не будет заменено, то выполняемая вами программа наследует все ваши отображения памяти (включая общую), библиотеки, которые сопоставлены с вашим адресным пространством (и новая программа, вероятно, не нуждается в них), файлы и так далее. Это немного странно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...