Newsgroup: it.comp.programmare.win32
Titolo: Allocazione memoria Win2000 diverso da XP

Ho fatto un programma in C che deve allocare molta memoria, diciamo 3GB.
alloco tale memoria usando una semplice malloc
Sotto Win2000 il programma funziona perfettamente, e anche se il mio PC ha 
2GB di ram fisica, quando il programma va a lavorare sulla parte del mio 
vettore che si trova ovviamente fuori dalla memoria fisica, il SO swappa, il 
programma rallenta, però continua perfettamente la sua elaborazione.
Sotto WinXP la malloc fallisce, dicendo che non c'e' sufficente spazio 
libero.
Premetto che ho un file di swap sufficentemente grande, infatti il limite 
massimo di allocazione e' di 4GB come si vede dal taskmanager.
Come mai succede tutto cio??
Come faccio a far funzionare il mio programma anche sotto WinXP??
Grazie per l'aiuto e/o suggerimenti. 

 Come faccio a far funzionare il mio programma anche sotto WinXP??
Serve un parametro di boot, che io non ho mai usato. Vedi:
http://support.microsoft.com/kb/833721
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

>> Ho fatto un programma in C che deve allocare molta memoria, diciamo 3GB.
volendo potresti usare un array che punta a blocchi più piccoli.
Solitamente comunque si usano i btree nei casi in cui servono quantità 
esagerate di memoria. 

Voglio solo avere gli stessi effetti che ho in Win2000 dove gestisce lui la 
memoria virtuale. Insomma, Win2000 mi assegna i 3GB e poi se li gestisce 
lui, swappandoli se necessario, ed è questo quello che voglio.
Come fare?
Se attivo i /3GB in WinXP poi ho il massimo a 3GB, ma se volessi allocare 
4GB ??
Insomma... se ho 4GB massimo di swap possibile... vorrei poterli allocare, 
oppure anche Win2000 massimo ne alloca 3GB??
Qualcuno BENE informato potrebbe spiegarmi questo genere di problematiche?
Grazie a tutti, come sempre siete I SOLI a poter colmare questo genere di 
lacune.
"4N" <xx...@yyyy.zzz> ha scritto nel messaggio 
news:45a8a60d$0$22387$4faf...@reader2.news.tin.it...


 libero.
Uno dei motivi di un out of memory è che non c'è abbastanza memoria 
*contigua* (malloc chiede memoria continua ovviamente).
Prendi un videogame. Lo apri, ci giochi una settimana di seguito (gulp) e 
comincia a darti degli out-of-memory anche se l'applicazione non ha buchi i 
memory leak. Il problema capita spesso ed è dovuto appunto alla 
disponibilità di memoria continua.
BTW questo è uno dei motivi che ha visto la nascita dei garbage collector 
(nativi o quello managed importa poco).
Non so se questo è il tuo caso ma in ogni caso non è saggio allocare così 
tanta memoria continuga. Io seguirei i consigli di chi ti dice di usare 
allocazioni più piccole.
-- 
Raffaele Rialdi
Microsoft .NET MVP 
http://mvp.support.microsoft.com
 -
http://italy.mvps.org
 UGIdotNET - User Group Italiano .NET
http://www.ugidotnet.org
 Weblog: 
http://blogs.ugidotnet.org/raffaele

 ha scritto nel messaggio 
news:Bs4qh.1366$bH4...@tornado.fastwebnet.it...


 memoria fisica.
Beh le cause possono essere diverse. Potresti farti un idea con perfmon per 
vedere l'occupazione della memoria non paginata (non paged area) oppure 
usando questo tool a volte riesci a farti un idea più precisa:
http://support.microsoft.com/kb/286470
Un altro fattore che però non so se può influire è il DEP (Data Execution 
Prevention). Potresti provare a disabilitarlo per quella specifica 
applicazione e vedere se cambia qualcosa.
Tieni anche conto che se i driver dei due pc sono differenti questi 
potrebbero giustificare questa differenza.


 Ho fatto un programma in C che deve allocare molta memoria, diciamo 3GB.
impossibile, a meno che non usi XP64. anche attivando il 4GT RAM Tuning il
limite *massimo* di allocazione è esattamente 3 gigabyte, che non potrai
mai allocare perché da quel valore devi sottrarre le prime pagine
(ovviamente Windows non può mica allocare una pagina il cui base address
sia NULL...) e quelle usate per memorizzare l'eseguibile e le DLL. il modo
per gestire cosiddetti blocchi di VLM (very large memory) su
un'architettura a 32 bit è usare i File Mapping.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 illimitato.
altrimenti file mapping object.


 un'architettura a 32 bit č usare i File Mapping.
alternativamente scegli qua quello che ti piace di piů:
http://msdn2.microsoft.com/en-us/library/aa366718.aspx
