Even if you're forking processes for concurrency, all memory pages assigned to the process at fork time are shared and use copy-on-write semantics, so anything that doesn't change doesn't consume real memory in each additional process. I don't know how much outside of each thread's/process's heap and stack sees writes in apache, but I suspect the difference between threads and processes is pretty slim in this respect.
No, you are assuming that 20 MB number is all heap. Wrong assumption.
Anyway this article is flawed about the number of MB each process uses because I think hes using PS to get the numbers and that shows shared libraries too. Shared, as in single code segment used by all the processes. Also he's making bad assumptions about the work load. Shit maybe I should blog.