Newsgroup: it.comp.programmare.win32
Titolo: Possibile che nessuno sappia rispondere perche' WinXP è inferiore a Win2000 ?

Ho scritto un programma che deve allocare circa 1GB di ram, usa una semplice
funzione malloc in C, xche' in WinXP non funziona dicendomi che non c'e'
memoria a sufficienza (lo swap file e' 3GB) mentre in Windows 2000 funziona
perfettamente andando poi a usare il file di swap quando la memoria è
finita?
Esiste qualche opzione di WinXP che limita la memoria assegnata ad un
programma alla sola fisica?
Esiste una funzione che possa ovviare a cio'?
grazie

Io non mi stupirei di tutto ciň...in passato ho fatto tanti programmi e
spesso mi sono imbattuto in cose che si comportavano in un modo su certe
macchine e in un modo in altre...e spesso avevano anche lo stesso sistema
operativo.
Inoltre Xp visto che č piů nuovo č probabile che sia ancora molto meno
ottimizzato rispetto a 2000: tuttavia anche l'operazione che cerchi di fare
č abbastanza inconsueta...a che ti servono 3 giga di ram contigui? Possibile
che usando 3 giga di spazio su disco gestendoti tu tutto da codice non
riesci a fare la stessa cosa?
Capisco la questione di principio ma spesso si deve giungere a dei
compromessi.
Gianni

 programma alla sola fisica?
Guarda, certe volte i programmi danno comportamenti a dir poco assurdi. Ho
da poco finito di scrivere un semplice programma di catalogo libri con le
MFC. La funzione di ricerca per titolo, sotto WinXP (sul mio computer e su
quello di mia sorella) andava benissimo. Su quello della mia ragazza (win
98) non c'era verso, le ID di risorsa di alcuni controlli erano sballati
(nonostante fossero giustissimi e piu' volte controllati). Alla fine ho
dovuto riscrivere i controlli (fortunatamente una cosa semplice, erano dei
"radio button").
Un saluto

Ciao, Romano!
Il giorno 04/11/2003 alle ore 15:08 hai scritto:
 RB> Ho scritto un programma che deve allocare circa 1GB di ram, usa una
 RB> semplice funzione malloc in C, xche' in WinXP non funziona dicendomi
 RB> che non c'e' memoria a sufficienza (lo swap file e' 3GB) mentre in
 RB> Windows 2000 funziona perfettamente andando poi a usare il file di swap
 RB> quando la memoria è finita?
 RB> Esiste qualche opzione di WinXP che limita la memoria assegnata ad un
 RB> programma alla sola fisica?
 RB> Esiste una funzione che possa ovviare a cio'?
Senti bello, qui i contributi vengono dati volontariamente e senza compenso,
se nessuno ti ha dato una soluzione per il tuo problema e' evidente che a
nessuno e' mai capitato un problema del genere, anche perche' nessun
programmatore sano di mente allocherebbe un gigabyte di memoria per un
programma.
Ti e' stato suggerito di cambiare metodo di allocazione.
Io ti dico che non e' obbligatorio che funzioni con Windows XP, quindi se
persisti nella tua convinzione che allocare cosi' tanta memoria e'
indispensabile puoi sempre dire a chi ricevera' il tuo programma che non e'
possibile usarlo con Windows XP.
Poiche' sono buono ti dico anche di provare con GlobalAlloc e VirtualAlloc
anziche' malloc e studiarti un po' l'allocazione della memoria in Windows.
Se tutto cio' non ti sta bene, visto che hai tutto il software originale,
puoi sempre contattare il supporto tecnico della Microsoft che e' pagato
apposta per darti delle risposte. Come dici ? E' a pagamento ? Non e' un
problema mio.
Bye

 funzione malloc in C, xche' in WinXP non funziona 
Perche' non provi ad usare i file mappati in memoria (memory mapped 
file)?
D

 [...]
Questo e' vero... pero' e' - IMHO - ancora piu' vero che spesso i 
problemi e bug li introduce chi *programma* :) 
Insomma, prima di sparare a zero sul Win32 SDK & simili, io 
personalmente studio con molta attenzione il codice che *io* scrivo 
...se proprio poi non riesco a trovare il bug, allora e' probabile che 
ci sia qualche bug in Win32 SDK o MFC o quello che e'... pero' e' anche 
probabile che io non sono stato abbastanza bravo a cercare e stanare il 
bug stesso :)
[*non* sono un coder professionista, codo per hobby ]
...ovviamente il tuo caso puo' anche essere diverso...
ciao
d

 ...ovviamente il tuo caso puo' anche essere diverso...
Infatti non volevo affatto dire che le MFC siano buggate, tutt'altro. Se è
un bug di Visual C++ o mio non lo so, mi limito a dire che nel mio caso ho
rilevato un comportamento "strano" nel mio ambiente di sviluppo relativo
all'ID di alcuni controlli. Sui PC con Windows XP i valori degli ID, come da
file resource.h, erano corretti, su un PC con Win98 no, anzi, due controlli
avevano due ID identiche, cosa che ovviamente mi scombinava il tutto.
Insomma, IDC_RADIO1 valeva 1049 su un PC, 1048 su un altro. Perchè? Quel
valore è assegnato automaticamente quando disegni il controllo sullo
schermo, non è necessario intervenire manualmente (ho usato l'editor di
visual C++ quando ho disegnato il mio Dialog principale). Cancellando e
ridisegnando i controlli, assegnate delle ID numeriche differenti, per magia
ha funzionato il tutto al primo colpo, su tutti i PC...
Morale: occhio a utilizzare scorciatoie grafiche, i RAD sono comodi, finché
funzionano a dovere.
Poi la cosa puo' dipendere totalmente dalla mia ignoranza in materia di
programmazione: ben venga la possibilità di essere smentito, non c'e' cosa
migliore che imparare dai propri errori.