命令行参数存储在哪里?
-
22-09-2019 - |
题
我对命令行参数的存储有疑问。
myprog.exe -cfg文件 myconfig.cfg
创建进程时会传递命令行参数,因此它们是否存储在进程外部?
操作系统将其存储在哪里?
解决方案
对于 WIndows,命令行参数保存在进程环境块中(PEB
),在进程创建时在用户进程地址空间中分配。
您可以阅读 Windows Internals 了解更多详细信息。这是一个 第 5 章的片段 - 进程、线程和作业.
我认为 Unix 风格也是一样的。该数据需要位于进程内存中,以便进程本身可以访问它。
其他提示
这取决于操作系统和可能的语言上。好的C为中心的答案是OS创建处理空间(包括加载代码,创建堆和栈等)。然后,它把命令行参数矢量中的位置,并且在堆栈上参数向量为“的argv”的然后复制地址,和词语“的argc”的计数。
这些任务完成之后,只有不操作系统允许过程执行。
在命令行参数被存储在应用程序的内存空间。正是从操作系统OS不同,我的猜测是,它通常会在堆的底部。这使它的代码存在于高管的内核源代码的类Unix操作系统,不知道哪里会是在Windows(不是说你可以看到反正源)。 C运行时代码(这是“CRT”来源于)开的argv和的argc从堆栈,然后调用主。如果您有兴趣了解更多可执行的启动在Linux中,本文由乌利齐·德雷珀(glibc的维护者)怎么可能是有价值的:的 http://people.redhat.com/drepper/dsohowto.pdf
在Linux中: 命令行参数将获取存储在堆栈中。 不要混淆环境变量与命令行参数,进程的地址空间具有用于环境变量
单独的存储区不隶属于 StackOverflow