Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

<vector>: xp vs vista

0 views
Skip to first unread message

Fumo Indiretto

unread,
Dec 11, 2009, 9:31:52 AM12/11/09
to
Salve a tutti.
Vorrei farvi una domanda.
Sto facendo sviluppo in c++ su windows xp utilizzando visual studio
2008 per lo sviluppo.
Ho fatto un piccolo progettino di esempio per prendere pratica con le
strutture dinamiche, e per essere precisi sto lavorando con i vector.
Ora ,senza dilungarmi troppo ,ho scoperto che con vista non ho
problemi, mentre su windows xp ho un errore di memoria durante l'uso
dei vector (bad allocation). In pratica non riesce ad allocare
abbastanza spazio di memoria a quanto riesco a capire. Ho fatto
diverse prove con lo stesso file eseguibile su diverse macchine con
sistemi operativi vista o xp. Su tutte le macchine xp ho questo
problema, mentre su tutte le macchine vista il problema non si pone.
Sapete se per caso ci sono delle incompatibilità note con questo tipo
di struttura e i sistemi operativi microsoft?
Grazie per le informazioni.
Costanzo

?manu*

unread,
Dec 11, 2009, 2:36:32 PM12/11/09
to
Fumo Indiretto wrote:
> Sapete se per caso ci sono delle incompatibilit� note con questo tipo

> di struttura e i sistemi operativi microsoft?

Lo escluderei fortemente. E' invece molto pi� probabile che sia
sbagliato il codice che hai scritto.

E.

Carlo Milanesi

unread,
Dec 11, 2009, 7:15:57 PM12/11/09
to
Fumo Indiretto ha scritto:

> Su tutte le macchine xp ho questo
> problema, mentre su tutte le macchine vista il problema non si pone.
> Sapete se per caso ci sono delle incompatibilit� note con questo tipo

> di struttura e i sistemi operativi microsoft?

Non credo proprio che il linguaggio C++ o la struttura "vector" si
comportino in Windows Vista diversamente da come si comportano in
Windows XP.
Il problema probabilmente sta nel fatto che tale struttura alloca aree
di memoria contigua di grandi dimensioni, e a causa della frammentazione
dello heap potrebbe non essere possibile allocare un lungo segmento di
memoria anche se e' ancora possibile allocare numerosi segmenti pi�
piccoli. Se un vector cresce gradualmente, effettua numerose
riallocazioni che frammentano lo spazio di indirizzamento.
Vedi se puoi preallocare subito la dimensione massima necessaria, usando
il metodo "reserve". Inoltre cerca di allocare tale tale "vector" prima
di aver allocato e deallocato molti altri oggetti.
Ma non � che le macchine con Windows Vista avevano pi� RAM o comunque
pi� memoria memoria virtuale massima allocabile dal sistema operativo, o
addirittura che fossero a 64 bit, mentre Windows XP era a 32 bit?

--

Carlo Milanesi
http://digilander.libero.it/carlmila

Fumo Indiretto

unread,
Dec 16, 2009, 4:26:46 AM12/16/09
to
Salve a tutti.
Intanto vi ringrazio per le precisazioni. Comunque il problema era,
ovviamente, mio.
Nel senso che essendo un vero "niubbone" non mi ero accorto che usavo
male la registrazione degli oggetti che memorizzavo nel vector. In
pratica usavo un puntatore all'interno ad una classe che però nel
momento in cui la classe moriva.....moriva anche lei (con tutti i
problemi di scope ecc. ecc.). Insomma quando funzionava era perché ero
"fortunato" e il pezzo di memoria dell'oggetto che andavo a registrare
nel vector non era stato ancora utilizzato dal sistema o dal
programma. Non so se sono stato chiaro, sto cercando di capire come
"chiarirmi" definitivamente le idee sullo scope e sulla gestione della
memoria in c/c++ quindi potrei risultare ancora confuso nella
spiegazione del problema. Grazie a tutti per avermi aiutato
nell'indagine sul problema :)
Speriamo di migliorare con la pratica.
Un saluto
0 new messages