Nel linguaggio C, è possibile allocare memoria su disco rigido (in una directory prescelta), se non c'è abbastanza RAM libera? Cambia qualcosa tra Win e Linux?
Nel linguaggio C, è possibile allocare memoria su disco rigido (in una directory prescelta), se non c'è abbastanza RAM libera? Cambia qualcosa tra Win e Linux?
la gestione della memoria è compito del sistema operativo, ed è il sistema operativo che, ad una richiesta di memoria da parte di un programma, sposta su disco le pagine di memoria che, secondo opportuni algoritmi, pensa saranno meno usate in futuro liberando spazio in ram...
quini non ha senso allocare memoria su disco... a meno che non crei un file... ma questo tipo di memorizzaizone su disco ha altri scopi [mantenere dati tra + esecuzioni del programma]![]()
Che io sappia non è compito dell'utente questo, ma se ne occupa direttamente il kernel...Originariamente inviato da moreno73
Nel linguaggio C, è possibile allocare memoria su disco rigido (in una directory prescelta), se non c'è abbastanza RAM libera? Cambia qualcosa tra Win e Linux?
Se te cerchi di allocare 100 mb di ram, ma ne hai solo 50 liberi gli altri 50 vengono messi sul disco...
Sotto linux vengono messi nella partizione di swap o, se non è presente, in un file sulla partizione dove sta il linux che stai usando...
Se hai una partizione di swap è meglio perchè è ottimizzata per contenere proprio la memoria in eccesso e così ha prestazioni migliori...
Sotto win *credo* che ciò che eccede viene messo sempre in un file...
Se vuoi occuparti "manualmente" di questo processo potresti aprire un file, scriverci il valore di qualche variabile e poi cancellare questa variabile...
ad esempio:
codice:char * cento_mega_bytes; cento_mega_bytes = (char *) malloc ( 1024*1024*100 ); // assegno un valore a $cento_mega_bytes che occupa esattamene 100 mb in memoria // scrivo $cento_mega_bytes in un file perchè per ora il suo contenuto non mi serve free ( cento_mega_bytes ); // per ora $cento_mega_bytes non mi serve: la cancello // ... // adesso free mi riserve: rialloco $cento_mega_bytes e la recupero dal file dove l'avevo messa
![]()
Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00
Su Windows (ed è lì che il programma deve girare), il programma alloca tutto in RAM, e quando questa finisce "esegue un'operazione non valida e viene terminato", avete presente?
Proverò a creare il file...
sei sicuro che non sia una violazione d'accesso [segmentation fault]???Originariamente inviato da moreno73
Su Windows (ed è lì che il programma deve girare), il programma alloca tutto in RAM, e quando questa finisce "esegue un'operazione non valida e viene terminato", avete presente?
Proverò a creare il file...
Guarda che anche se windows è piuttosto disprezzato, la gestione della memoria la fa lo stesso eh! :gren:
Mi pare molto stran quello che dici
beh a me capita molto spesso il tuo problema...
ma non è certo un problema di ram... ( ho due giga di ram :gren: ) è un problema mio perchè quando scrivo dei programmi spesso mi capita di fare errori di [segmentation fault] ed anke se il programma si compila lo stesso poi quando arrivo alla funzione incriminata si crasha dando l'errore che riscontri te...
http://www.mangaitalia.net/
questo è un cazzo metallizzato a quattro ruote e noi due siamo i coglioni che se lo portano dietro - da Bad Boys con Will Smith and Martin Lawrance di John Whoo
No no, crasha proprio quando ne alloco troppa (facendo delle prove, dopo alcuni centinaia di MB, ne ho 512 fisici sul PC)
Originariamente inviato da rocco.g
( ho due giga di ram :gren: )me ne presti uno?
Non so come avvenga la gestione della memoria in eccesso su win, ma mi pare strano che non usi un file per swapparci la roba...
Sotto Linux invece sono sicuro che funzioni alla perfezione: sul vecchio computer avevo 128 mb di ram, ma arrivavo ad occuparne perfino 300 o 400...
Ovviamente le prestazioni collassavano...
Se puoi prova a ricompilare il tuo pogramma anche sotto Linux e controlla se il problema sta nel sistema operativo (molto probabile :gren: ¹ ), o nel programma...
![]()
¹: scherzo, scherzo, non voglio far nascere un flame, era solo una battutina innocente :sgrat:
Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00
e pagefile.sys [almeno nei sistemi NT] che è?Originariamente inviato da /dev/null
Non so come avvenga la gestione della memoria in eccesso su win, ma mi pare strano che non usi un file per swapparci la roba...
è equivalente alla partizione di swap di linux.. solo che è dinensionato dinamicamente [di norma. Volendo puoi anche dargli una dimensione fissa per velocizzare la cosa]
![]()
Non ho detto che non ha un file/partizione dove swappare la roba... Ho solo detto che non so come funzioni esattamente...Originariamente inviato da }gu|do[z]{®©
e pagefile.sys [almeno nei sistemi NT] che è?![]()
Questo file (è un file?) c'è su tutti i sistemi m$?
E' obbligatoriamente presente o è facoltativo?
Forse per qualche ragione a moreno73 non funziona come dovrebbe... O forse è colpa del suo programma...![]()
Sono solo le ipotesi più probabili che mi vengono in mente...
Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00