我怀疑@存储命令行参数。
myprog.exe -cfgfile myconfig.cfg
命令行参数在创建进程时传递,因此它们是否在进程外部进行了操作?
OS存储它?
答案 0 :(得分:5)
对于WIndows,命令行参数保存在进程环境块(PEB
)中,该块在创建进程时在用户进程地址空间中分配。
您可以阅读Windows Internals以获取更多详细信息。这是一个snippet from Chapter 5 - Processes, Threads, and Jobs。
我认为对于Unix风格来说它是一样的。这些数据需要在进程内存中,以便进程本身可以访问它。
答案 1 :(得分:2)
这取决于操作系统和可能的语言。一个好的以C为中心的答案是操作系统创建进程空间(包括加载代码,创建堆和堆栈等)。然后它将命令行参数向量放在一个位置,然后将参数向量的地址复制到堆栈上的'argv',并将单词的计数复制到'argc'。
只有在完成这些任务后,操作系统才允许执行该过程。
答案 2 :(得分:0)
命令行参数存储在应用程序的内存空间中。从操作系统到操作系统的不同之处,我的猜测通常是在堆的底部。把它放在那里的代码是在类Unix操作系统上的exec的内核源代码中,不确定它在Windows中的位置(不是你无论如何都可以看到源代码)。 C运行时代码(这是“crt”来自的地方)从堆栈中获取argv和argc,然后调用main。如果您有兴趣了解可执行文件如何在Linux中启动,那么Ulrich Drepper(glibc维护者)的这篇论文可能很有价值:http://people.redhat.com/drepper/dsohowto.pdf
答案 3 :(得分:0)
: 命令行参数将存储在堆栈中。 不要将环境变量与命令行参数混淆,进程地址空间对于环境变量具有单独的内存区域