【问题标题】:how the exec() function maintain the memory spaces?exec() 函数如何维护内存空间?
【发布时间】:2014-12-11 09:55:26
【问题描述】:

我阅读了 c 中的 exec() 函数。他们说在子进程中调用 exec() 函数时。这将取代新程序。

我对此表示怀疑,如果我运行该进程,则需要 10 MB(例如)内存。所以当我创建一个子进程时,它也具有相同的内存空间。

在我调用 exec() 函数的子进程中,它将获取另一个可执行文件。考虑需要30MB内存。那么该过程将如何工作..请举例说明?

在另一个程序中,我只是将数组声明为

  array[100000]={5};

然后我运行那个编译那个程序。在另一个程序中,我只调用了 fork() 和 exec() 函数。但它可以正常工作。

【问题讨论】:

  • 当您fork 一个新的子进程时,它是父进程的精确副本。但是,某些数据(如可执行代码段)可能会被共享。但是,当您调用exec 时,当前进程的所有痕迹都将丢失,并且它的内存未映射/释放,并且新进程的数据将被正确分配(因此,如果新程序有一个大的静态数组,它将是加载程序按预期分配)。

标签: c exec fork


【解决方案1】:

当您调用任何 exec*() 函数时,内存映射会被替换。

无论子进程在 fork() 之后使用多少内存,因为 exec*() 都会导致进程的现有内存映射被破坏,并为新的可执行文件分配/映射新内存。

另请参阅官方 documentation 了解 exec() 的作用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多