【发布时间】:2014-12-11 09:55:26
【问题描述】:
我阅读了 c 中的 exec() 函数。他们说在子进程中调用 exec() 函数时。这将取代新程序。
我对此表示怀疑,如果我运行该进程,则需要 10 MB(例如)内存。所以当我创建一个子进程时,它也具有相同的内存空间。
在我调用 exec() 函数的子进程中,它将获取另一个可执行文件。考虑需要30MB内存。那么该过程将如何工作..请举例说明?
在另一个程序中,我只是将数组声明为
array[100000]={5};
然后我运行那个编译那个程序。在另一个程序中,我只调用了 fork() 和 exec() 函数。但它可以正常工作。
【问题讨论】:
-
当您
fork一个新的子进程时,它是父进程的精确副本。但是,某些数据(如可执行代码段)可能会被共享。但是,当您调用exec时,当前进程的所有痕迹都将丢失,并且它的内存未映射/释放,并且新进程的数据将被正确分配(因此,如果新程序有一个大的静态数组,它将是加载程序按预期分配)。