Sto scrivendo un programma (un proverbio del teorema come accade) il cui requisito di memoria è "il più possibile, per favore"; cioè, può sempre fare meglio usando più memoria, per scopi pratici senza limite superiore, quindi quello che in realtà deve fare è usare solo la quantità di memoria disponibile, né più né meno. Posso capire come dare la priorità ai dati per cancellare il valore più basso quando la memoria è breve; il problema che sto cercando di risolvere è come capire quando questo sta accadendo.Mantenere l'utilizzo della memoria entro l'importo disponibile
Idealmente mi piacerebbe una chiamata di sistema che restituisca "quanta memoria è rimasta" o "siamo ancora fuori memoria?"; per quanto posso dire, nessuna cosa del genere esiste?
Ovviamente, malloc può segnalare l'esaurimento della memoria restituendo 0 e il nuovo può chiamare un gestore; questi non sono segnali ideali, ma sarebbero meglio di niente. Un problema, tuttavia, è che voglio veramente sapere quando la memoria fisica sta per scadere, quindi posso evitare di andare in profondità nello swap e quindi fermare tutto; Suppongo che non ci sia modo di chiedere "dobbiamo ancora scambiare?" o dire al sistema operativo "non scambiare sul mio account, semplicemente fallire le mie richieste se si tratta di questo"?
Un altro approccio sarebbe quello di scoprire quanta RAM è nella macchina e monitorare la quantità di memoria che il programma sta utilizzando al momento. Per quanto ne so, non c'è generalmente modo di dire al primo? Ho anche l'impressione che non ci sia un modo affidabile per dire a quest'ultimo se non avvolgendo malloc/free con una funzione di bookkeeper (che è poi più problematica in C++).
Ci sono approcci che mi mancano?
L'ideale sarebbe una soluzione portatile, ma sospetto che ciò non accadrà. In caso contrario, una soluzione che funziona su Windows e un'altra che funziona su Unix sarebbe buona. In caso contrario, potrei cavarmela con una soluzione che funziona su Windows e un'altra che funziona su Linux.
Bene, tutto quello che posso dire con certezza è che non troverete una soluzione portatile. Oh, e questo non è il compito più facile. – sbi
Su Linux: http://linux.die.net/man/2/getrusage forse? Su Windows: GetProcessMemoryInfo forse? –