【发布时间】:2015-12-06 13:16:34
【问题描述】:
我总是对这点 C 魔法有点模糊。当您调用 execv 时,您正在“替换进程映像”。这到底是什么意思呢?只是 DATA 段?一切都分配给进程?堆栈?堆?
我的问题是您传递给 execv 的参数所使用的存储会发生什么变化?如果它们是调用 execv 的函数的局部变量,那么它们就在堆栈上。但是如果你替换进程映像,并调用新进程的 main() 函数,当 main() 返回时会发生不好的事情,因为从主调用指向返回位置的堆栈信息被新进程映像替换。 变量也一样,是吗?如果这些变量是在堆上分配的呢?
求知者向任何知道的人求问。
【问题讨论】:
-
我认为this 可能是最好的答案。
-
操作系统需要设置新的地址空间,以便程序启动所需的一切都可用 - 这可能包括复制参数。
-
没有所谓的“从主调用返回位置”。当
main返回时,程序结束。