【发布时间】:2018-07-10 20:00:58
【问题描述】:
就内存分配效率而言,在子代码中的fork() 之后,如果我使用execve() 执行一个程序,这将比没有execve() 执行的同一程序更有效,因为孩子不会分配父亲的堆栈和堆,而只是自己的?
朴素的例子:
没有执行
[..some father code...]
int i;
if(!fork()) {
sum() //from an #include "porg.h"
}
使用执行
[..some father code...]
if(!fork()) {
execve("sum", NULL, NULL); //sum is a program which executes i=2+3
}
第二个在内存分配方面比较好? 是更好地替换我的进程的整个虚拟地址空间,还是更好地通过调用另一个程序中的函数来运行上述代码,该程序包含在#include“prog”中,就完成的操作数量而言程序执行过程中所携带的内存是怎么回事?
【问题讨论】:
-
请定义
memory的含义。我将其理解为virtual memory。所以编辑你的问题来改进它。目前还不清楚。如果可能,提供一些minimal reproducible example -
这毫无意义 - 执行一个完全不同的程序比执行一条指令更便宜(就 CPU 或内存而言)怎么可能?!毕竟,两个代码 sn-ps 都会调用
fork(),而第二个代码的作用要大得多。 -
请在内存分配效率中定义效率是什么意思。
-
@wallyk 编辑希望它清楚
标签: linux memory heap-memory stack-memory