Csak remélni merem, hogy ez nem így van. :)
(Mi történik, ha kevés a memória? Akkor sem hív még malloc-ot? Nem arról van-e szó, hogy megadhatod mi az a memória ami mindenképp kell, vagy várhatóan kell, így optimalizálva a futást kicsit?)
Mondj egy olyan dolgot amit a java-c# meg tud tenni memóriakezelés közben és ami c/c++ esetén nem lehetséges. Én egy dolgot tudok: elvileg át tudja pakolni az objektumokat a memóriában, megszüntetve a fragmentálódást. Hogy ezt valóban megteszi-e azt nem tudom, de nem tűnik egy olcsó műveletnek.
Ha jól sejtem az az infó hiányzik, hogy a malloc hívás nem csak egy vékony wrapper a kernel hívás felett, egész sok mindent megoldhat magában, akár még kapásból lefoglalhatna hatalmas területeket is induláskor.
Mint ahogy a free sem feltétlen adja vissza a memóriát az OS-nek. (Sőt, azt is megkockáztatom, hogy ilyet soha nem tesz...)
Csak egy példa, hogy mi mindent csinálhat egy malloc implementáció:
http://goog-perftools.sourceforge.net/doc/tcmalloc.html
"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o