Вопрос

У меня есть сомнения @ относительно хранения аргументов командной строки.

myprog.exe -cfgфайл myconfig.cfg

Аргументы командной строки передаются при создании процесса, поэтому они сохраняются вне процесса?

где ОС хранит его?

Это было полезно?

Решение

Для WIndows аргументы командной строки хранятся в блоке среды процесса (PEB), который выделяется в адресном пространстве пользовательского процесса при его создании.

Вы можете прочитать «Внутренности Windows» для получения более подробной информации.Вот фрагмент из главы 5 — Процессы, потоки и задания.

Я предполагаю, что то же самое касается и версий Unix.Эти данные должны находиться в памяти процесса, чтобы сам процесс мог получить к ним доступ.

Другие советы

Это зависит от ОС и, возможно, языка.Хороший ответ, ориентированный на C, заключается в том, что ОС создает пространство процесса (включая загрузку кода, создание кучи и стека и т. д.).Затем он помещает вектор аргументов командной строки в определенное место, а затем копирует адрес вектора аргументов в «argv» в стеке, а количество слов в «argc».

Только после выполнения этих задач ОС разрешает выполнение процесса.

Аргументы командной строки хранятся в памяти приложения.Что именно отличается от ОС к ОС, я предполагаю, что обычно оно находится в самом низу кучи.Код, который помещает его туда, находится в исходном коде ядра для exec в Unix-подобных ОС, но не уверен, где он будет находиться в Windows (в любом случае вы не можете увидеть исходный код).Код среды выполнения C (отсюда и происходит «crt») берет argv и argc из стека, а затем вызывает main.Если вы хотите узнать больше о том, как запускается исполняемый файл в Linux, эта статья Ульриха Дреппера (сопровождающего glibc) может оказаться полезной: http://people.redhat.com/drepper/dsohowto.pdf

в Linux:Аргументы командной строки будут сохранены в стеке.не путайте переменную среды с аргументами командной строки, в адресном пространстве процесса есть отдельная область памяти для переменных среды

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top