@kater
Du kannst 100GB reservieren ohne Fehler aber nicht nutzen. Die Speicherverwaltung von Linux ist da komisch.
Sicher ? Das wuerd ja bedeuten das sich der gcc ned an den ISO C Standard haelt. Dort wird vorgeschrieben, dass calloc nur einen ungleich NULL Pointer zurueckgeben darf, wenn der Aufruf erfolgreich(also aller speicher allokiert wurde) durchging.
Also nen calloc oder malloc iss fuer das betriebssystem nen gleichzeitiges nutzen, weil das BS ned mitbekommt ob dein programm den speicher auch wirklich nutzt.
Und wie sollt nen Programm wissen, ob es denn allocierten speicherbereich belegen darf ohne nen Signal zu kassieren (Anmerkung, C kann keine Exceptions, also calloc und malloc werden dir nie eine werfen) ... wenn es keinen fehlercode zurueckbekommt.
@m.mickey
das Du mit calloc 1,5 GByte reservieren willst, iss nur die halbe Wahrheit.
Die ganze Wahrheit iss, das du 1,5 GByte
am Steuck allokieren willst.
Und glaub das haengt ziemlich vom Speicherausbau, der Verwaltung deines BS und dem momentanen systemzustand ab !
unter windows 7 64 bit krieg ich mit der 32bit runtime (vc project kompiliert als 32 bit app) auch nur unwesentlich mehr als 1,5 GB hin am stueck (mit new) obwohl 8GB Speicherausbau.
unter 64 bit werdens dann locker mehr
Problem fuer windows iss, nen 32 bit programm kann nie mehr als 2 (nein, nicht 4) GB Speicher insgesammt allokieren. Mehr speicherseiten bekommt es nicht. da sind dann aber auch noch andere dinge drinne ... nicht nur der dynamische speicher. Stack, CodeSegment, Shared memory, filediskreptoren, eingeblendeter speicher von benutzten dlls.
Wenn man die bissi ungeschickt organisiert, kann schon 500MB vom max Adressraum weg sein ... kann sein, das das Linux geschickter macht.
Aber beantworte uns doch mal bitte:
Warum brauchst du unter c++ +1Gb speicher am stueck ?
selbst bei gestandenen Embedded / C-Programmierern werden bei solchen Groessen die Fragezeichen um den kopf schwirren ...
Kannst das ned in mehrere Bloecke aufteilen ?
warum so viel ueberhaupt in den speicher ?
Kannst du nicht nen Temp file nehmen und nur teile davon in den Speicher einblenden (memory Mapped IO) ?
Ciao ...