But Linux doesn't clone the entire address space: it copies the page table, RO: if the child attempts to write, then it uses COW.
So if fork/clone is followed immediately by exec/execve/etc., there is minimal copying.
So if fork/clone is followed immediately by exec/execve/etc., there is minimal copying.
The implications of this is that even if you immediately execve in the child, you still have to pay for the cost of setting COW on the entire address space and then later faulting on every single writable page in the parent process. The performance impact might not be massive, but it's not nothing.
One of these enhanced fork exec calls stops the parent until the child execs. Then you don't need to touch the parent page mappings or worry about concurrency. (Although it's not ideal if the parent is threaded)
But it's been a while....