2010-01-22 57 views
4

我有疑問@命令行參數的存儲。哪裏存儲命令行參數?

MYPROG.EXE -cfgfile myconfig.cfg

當過程被創建,以便他們在strored進程外的命令行ARG遊戲過去了?

哪裏操作系統存儲它?

回答

5

對於Windows,命令行參數保存在進程環境塊(PEB ),該進程在創建進程時在用戶進程地址空間中分配。

您可以閱讀Windows內部瞭解更多詳細信息。這是snippet from Chapter 5 - Processes, Threads, and Jobs

我會假設它對於Unix的風格是一樣的。這些數據需要在進程內存中,以便進程本身可以訪問它。

+0

請注意,Windows上的程序只傳遞一個參數字符串。它由C運行時分割成'argv'。 – zneak

3

它取決於操作系統和可能的語言。一個好的以C爲中心的答案是操作系統創建進程空間(包括加載代碼,創建堆和堆棧等)。然後它將命令行參數向量放在一個位置,然後將參數向量的地址複製到堆棧中的'argv',並將單詞的計數複製到'argc'。

只有在完成這些任務後,操作系統才允許進程執行。

0

命令行參數存儲在應用程序的內存空間中。確切地說,從OS到OS的區別在於,我的猜測通常是在堆的底部。將它放在那裏的代碼是在類Unix操作系統上的exec的內核源代碼,不知道它在Windows中的位置(不是你可以看到源代碼)。 C運行時代碼(這是「crt」來自何處)從堆棧中獲取argv和argc,然後調用main。如果您有興趣瞭解更多的可執行文件如何在Linux下啓動時,本文由烏利齊·德雷珀(glibc的維護者)可能是有價值的:http://people.redhat.com/drepper/dsohowto.pdf

0

在Linux中: 命令行參數將被存儲在堆棧中。 不要將環境變量與命令行參數混淆,進程地址空間對環境變量有單獨的內存區域