我对命令行参数的存储有疑问。

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中: 命令行参数将获取存储在堆栈中。 不要混淆环境变量与命令行参数,进程的地址空间具有用于环境变量

单独的存储区
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top