posix_spawn isn't powerful enough since it only supports a limited set of process setup operations. So if you need to do some specific syscalls before exec that aren't covered by it then the fork/exec dance is still necessary.
In principle one can use vfork+exec instead but that very hard to get right.
Also, if you DO use fork() without immediately doing an exec(), and start writing all over your existing allocations... just don't?