Das hatte ich im anderen Thread bereits erwähnt:
Pagefaults sind teuer.
Wenn du also das Mapping nicht bereits beim Zuweisen erledigst, dann wird das Programm zwar schnell den Adressraum zugeteilt kriegen, aber bei jedem Zugriff auf diesen "Speicher" einen Pagefault pro Page auslösen. Das kann man mit intelligenten/vorausschauenden Algorithmen abfedern, so man denn möchte (d.h. wenn Pagefaults in Reihe auftreten bereits präventiv mappen) oder man mappt bereits, wenn das Programm den Speicher reserviert.
Letzteres führt zu Speicherverschwendung, wenn die Anwendung diesen Speicher dann nicht nutzt (weil sie nur präventiv "für schlechte Zeiten" etwas bestellt hat). Wobei die Statistik zeigt, dass kleinere Speicherblöcke in der Regel auch direkt benutzt werden, meist aber nur für kurze Zeit vonnöten sind. Darum werden diese meist nicht auf dem Heap alloziiert, sondern auf dem Stack. (Gab mal Streit deswegen, weil MacOSX eher auf dem Heap alloziiert hat als Linux und bei einem Benchmark darum vollkommen versagt hat.)
Das heißt, du brauchst "große" Speicherblöcke nicht direkt mappen, solltest dies bei "kleinen" aber tun, um Pagefaults einzusparen. Oder du alloziierst "kleine" Blöcke woanders. Die Definition von "groß" und "klein" ist Anwendungsabhängig und wird von verschiedenen Betriebssystemen verschieden gehandhabt; allerdings gibt es überall verschiedene Strategien, wenn es performant sein soll.
Was das zweite betrifft, so halte ich es für unsinnig. Wenn du mappst, dann bitte gleich richtig. Außerdem sollte eine Anwendung davon ausgehen, dass frisch alloziierter Speicher nur Unsinn enthält und nichts lesen, was da nicht selbst reingeschrieben wurde. Aus Sicherheitsgründen ist das allerdings sinnvoll, da ein Programm so nicht an im System vorhandene Passwörter etc. herankommen kann; RAM wird in der Regel nicht genullt, bevor er der Anwendung übergeben wird.
Das musst du entscheiden.
Gruß,
Svenska