Am Die, 2002-08-06 um 16.44 schrieb Michael Matz:
Hi,
On 6 Aug 2002, Martin Oehler wrote:
Gibt es in C/C++ eine Möglichkeit, den noch verfügbaren RAM-Speicher abzufragen (es soll nicht geswapt werden)?
Sowas gibt's eigentlich per Design nicht (eben weil wegen swapping ja immer genug Speicher da ist). ACK. Drum immer schön mallocs auf NULL checken ;)
Du kannst es also entweder an einen vom User anzugebenden Parameter koppeln, oder, wenn du linux-spezifisch bleiben willst, und ueble Hacks nicht scheust, einfach /proc/meminfo auslesen. Ich würde beides lassen ;)
So banal es klingen mal, wenn Dein Progi regelmässig derart viel Speicher wirklich benötigt (d.h. dauerhaft im Zugriff haben muss) und Du mit Swapping nicht leben kannst, ist dein Specher unterdimensioniert. Wenn der Speicher allerdings nicht wirklich dauerhaft im Zugriff steht, sollest Du mal über das interne Design deines Programmes nachdenken (Wo kann Speicher gespart werden, muss wirklich immer alles im Speicher hängen, wo/wie kann ich Daten auslagern usw. usf).
Ich wuerde sagen (MemFree + Buffers + Cached) * 0.9 oder 0.8 ist ein recht guter Wert fuer freien Speicher, und laesst noch etwas ueber fuer Puffer und andere Prozesse. Nur ist das für Apps praktisch ohne Belang: Zwischen phys. und virt. Memory bzw. Addressbereich funken noch ulimits u.Co. hinein (man getrlimits, man ulimit)
Ralf