View Full Version : Quanta memoria fisica libera ho?
A prima vista sembrerebbe impossibile, per i meccanismi di paginazione e/o segmetazione dei vari SO, per la memoria virtuale che il SO assegna ad ogni processo, ecc ecc.
Ma allora come fanno programmi come Prime95 a saperlo? Si' perche' se lanciate il torture test il prog riempe tutta la memoria libera che trova. E non provoca swap. Quindi non e' da dire che alloca la dimensione della RAM, e che poi ci pensa il SO a fare uno swap out. Se per esempio ho 1GB con 300MB occupati lui ne usa 700, se ne ho 371 occupati lui ne usa 629!! :confused:
A me non e' mai riuscito di trovare niente. E chiedo aiuto a voi che siete anni luce piu' esperti di me. :help:
Alla domanda "perche' ti interessa?" Rispondo: perche' sarebbe moooolto utile anche a me poterlo fare.
E poi.... se qualcuno lo fa, siglifica che si puo' fare. E se si puo' fare, voglio sapere come!
Grazie
DMA[']A prima vista sembrerebbe impossibile, per i meccanismi di paginazione e/o segmetazione dei vari SO, per la memoria virtuale che il SO assegna ad ogni processo, ecc ecc.
Ma allora come fanno programmi come Prime95 a saperlo? Si' perche' se lanciate il torture test il prog riempe tutta la memoria libera che trova. E non provoca swap. Quindi non e' da dire che alloca la dimensione della RAM, e che poi ci pensa il SO a fare uno swap out. Se per esempio ho 1GB con 300MB occupati lui ne usa 700, se ne ho 371 occupati lui ne usa 629!! :confused:
A me non e' mai riuscito di trovare niente. E chiedo aiuto a voi che siete anni luce piu' esperti di me. :help:
Alla domanda "perche' ti interessa?" Rispondo: perche' sarebbe moooolto utile anche a me poterlo fare.
E poi.... se qualcuno lo fa, siglifica che si puo' fare. E se si puo' fare, voglio sapere come!
Ciao, se ti riferisci (come suppongo) ai sistemi Windows e vuoi avere "programmaticamente" delle semplici statistiche a livello globale sulla memoria, ci sono 2 funzioni disponibili in Win32:
- <GlobalMemoryStatus> (http://msdn.microsoft.com/library/en-us/memory/base/globalmemorystatus.asp) (da Win95 in su)
- <GlobalMemoryStatusEx> (http://msdn.microsoft.com/library/en-us/memory/base/globalmemorystatusex.asp) (da Win2000 in su)
Gandalf_BD
07-01-2006, 13:45
e su un sistema linux?
Ciao, se ti riferisci (come suppongo) ai sistemi Windows e vuoi avere "programmaticamente" delle semplici statistiche a livello globale sulla memoria, ci sono 2 funzioni disponibili in Win32:
- <GlobalMemoryStatus> (http://msdn.microsoft.com/library/en-us/memory/base/globalmemorystatus.asp) (da Win95 in su)
- <GlobalMemoryStatusEx> (http://msdn.microsoft.com/library/en-us/memory/base/globalmemorystatusex.asp) (da Win2000 in su)
E quindi potrei usare l'informazione contenuta in .dwAvailPhys per allocare esattamente uno spazio pari alla memoria fisica disponibile. Questo mi dovrebbe salvaguardare dal fare swap. Giusto?
Sarebbe perfetto. Grazie mille. :D Un grande!! :ave:
Ora... cambiamo leggermete scenario, ho in memoria sia il SO (ovvio) e altre applicazioni. Posso sapere quanta memoria e' usata dal sistema operativo e quanta e' usata da altre applicazioni (memoria che quindi puo' essere swappata).
Mi spiego meglio con un esempio numerico: ho 1 GB di ram. 300MB sono occupati, 100MB dal SO e 200MB da altre applicazioni. Io avrei 700MB liberi e a disposizione (e ora, grazie a andbin so come fare a saperlo), ma potrei anche allocare 900MB e costringere il SO a swappare la memoria appartenente ad altre applicazioni in modo da lasciare tutto qullo che mi serve a me....
E' fattibilie una cosa del genere? Se si', come?
Ultima domanda... ormai sto approfittando di voi indegnamente....
c'e' qualcosa di equivalente al GlobalMemoryStatusEx per linux!?!
e su un sistema linux?
Su Linux dovrebbero esserci delle informazioni sulla memoria nello pseudo-filesystem /proc, in particolare nello pseudo-file meminfo, se non sbaglio.
A me personalmente, come programmatore, le informazioni che si trovano in /proc sono sempre sembrate un po' stupide, perché sono tipicamente fatte per essere "human readable" (leggibili dall'utente) e quindi non facilmente gestibili da un programma!
DMA[']E quindi potrei usare l'informazione contenuta in .dwAvailPhys per allocare esattamente uno spazio pari alla memoria fisica disponibile. Questo mi dovrebbe salvaguardare dal fare swap. Giusto?
Sarebbe perfetto. Grazie mille. :D Un grande!! :ave:
No no ... alt! Non è proprio così immediato. Intanto io non espertissimo nella gestione della memoria di Windows (o almeno, non sono cose che uso/gestisco tutti i giorni! ;) ).
Dovresti documentarti un po' a partire da <questo> (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/memoryank.asp) indirizzo o magari leggere <questo> (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dngenlib/html/msdn_virtmm.asp) articolo.
DMA[']Ora... cambiamo leggermete scenario, ho in memoria sia il SO (ovvio) e altre applicazioni. Posso sapere quanta memoria e' usata dal sistema operativo e quanta e' usata da altre applicazioni (memoria che quindi puo' essere swappata).
Mi spiego meglio con un esempio numerico: ho 1 GB di ram. 300MB sono occupati, 100MB dal SO e 200MB da altre applicazioni. Io avrei 700MB liberi e a disposizione (e ora, grazie a andbin so come fare a saperlo), ma potrei anche allocare 900MB e costringere il SO a swappare la memoria appartenente ad altre applicazioni in modo da lasciare tutto qullo che mi serve a me....
E' fattibilie una cosa del genere? Se si', come?
Dovresti vedere, mi sembra, l'API <Performance Data> (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/perfmon/base/performance_data.asp).
DMA[']Ultima domanda... ormai sto approfittando di voi indegnamente....
c'e' qualcosa di equivalente al GlobalMemoryStatusEx per linux!?!
Vedi la mia risposta a Gandalf_BD.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.