Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Marathon: arriva il Fortnite hardcore
Marathon: arriva il Fortnite hardcore
Marathon è il titolo multiplayer competitivo del momento. Ecco quali sono le caratteristiche di gioco principali, insieme alle nostre prime considerazioni dopo qualche "run" nell'extraction shooter di Bungie
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 13-10-2002, 19:38   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
La memoria

Cionci, guarda questo scorcio di programma che ad ogni passaggio
crea un nuovo spazio in memoria atto a contenere un'immagine, nel
programma ne vengono caricate ben 100!

Come gestisca ogni singolo puntatore alle singole immagini mi è oscuro
ma la mia domanda è la seguente:

possibile che con una semplice chiamata: delete MyImage la
memoria allocata dalle 100 immagini viene deallocata tutta in un colpo
solo?

Usando le API di windows, sembrerebbe di si: occhio, ho usato il condizionale
in quanto non ne sono affatto sicuro perchè: uscendo dal programma e rilanciando
il medesimo più volte, la memoria totale fisica di sistema continua incessantemente
a diminuire

a te l'ardua sentenza

TImage *MyImage = new TImage(Form1);

for (int i =0; i <100; i++)
{

Image = new TImage(this);

MyImage->Picture->LoadFromFile(FileListBox1->Items->Strings[i])

}
delete MyImage;
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2002, 09:15   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Re: La memoria

Image = new TImage(this);

Ma questo quando lo deallochi ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2002, 09:47   #3
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
mai, e qui sta il punto

prima di caricare le 100 immagini visualizzo la memoria disponibile con:
_MEMORYSTATUS lp_membuf;

GlobalMemoryStatus(&lp_membuf);
StatusBar1->Panels->Items[1]->Text = (int)lp_membuf.dwAvailPhys;



e dopo aver caricato le 100 immagini richiamo:

_MEMORYSTATUS lp_membuf;

GlobalMemoryStatus(&lp_membuf);
StatusBar1->Panels->Items[1]->Text = (int)lp_membuf.dwAvailPhys;


e calcolo la differenza che è sempre zero: questo non mi spiego

possibile che chiamando il delete una sola volta e fuori dal loop venga deallocata tutta la memoria?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2002, 10:16   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
No...però ci potrebbero essere meccanismi interni del BCB che fanno questo in automatico...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2002, 19:25   #5
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
ho approfondito ed è tutto clamorosamente cannato il mio ragionamento perchè con:

delete MyImage

fuori dal loop, viene cancellata solo l'ultima allocazione; le funzioni di gestione della memoria ritornano zero perchè l'indirizzo delle precedenti allocazioni viene perso per sempre: memory leak

morale: BCB non dealloca automaticamente

grazie cionci in ogni caso
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 14-10-2002, 19:39   #6
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
pensa che se io scrivo:


TForm *Form2 = new TForm(this);
TImage *MyImage = new TImage(Form2);

for (int i =0; i <100; i++)
{
Image = new TImage(Form2);
MyImage->Picture->LoadFromFile(FileListBox1->Items->Strings[i])
}

ed ora scrivo

delete Form2;

viene cancellato tutto quanto allocato in un colpo solo; una caratteristica di BCB
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 16-10-2002, 19:54   #7
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
come non detto, i problemi di memoria continuano

sapete se la memoria virtuale in windows è gestita automaticamente?

grazie
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 07:49   #8
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da misterx
[b]sapete se la memoria virtuale in windows è gestita automaticamente?
In che senso ? Se è memoria virtuale DEVE essere gestita automaticamente per definizione

Non capisco ancora bene il tuo codice...
Qaul'è l'oggetto che deve avere 100 istanze ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 08:55   #9
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
Quote:
Originariamente inviato da cionci
[b]
In che senso ? Se è memoria virtuale DEVE essere gestita automaticamente per definizione

Non capisco ancora bene il tuo codice...
Qaul'è l'oggetto che deve avere 100 istanze ?

in questo senso

se tu compili il codice da me postato e lo utilizzi per visualizzare su un form 1500 immagini ad esempio; ti accorgerai che ad un certo punto verranno emessi dei messaggi di errore alquanto depistanti del tipo: "Canvas does not allow"

questo mi ha fatto pensare che il codice da me postato utilizzi solo la ram fisica di sistema a meno che non si informi windows di ciò attraverso opportune funzioni

anch'io ho sempre pensato che la memoria virtuale fosse gestita da windows in modo automatico ma gli strani messaggi e bada bene, non ripetibili, mi hanno depistato

per questo chiedevo conferme
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 09:38   #10
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
se state parlando di c++ (bcb e palle varie...)

Mi ricordo che nessuno si preoccupa di deallocare niente (al contrario del GarbageCollector Java per esempio).
Quindi ad ogni new qualcosa dovrebbe corrispondere un delete quel qualcosa. A meno che non si cancellino oggetti che hanno figli, ossia oggetti che avevano come parent o owner o qualcosa simile l'oggetto cancellato.
Sono solo ricordi offuscati dal tempo passato da quando smanettavo col bcb... ah bei tempi!!! Quindi ditemi se ho sparato troppo grosso
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 11:40   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ma quei 100 TImage quando li deallochi ??!?!?!
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 12:08   #12
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
x Angus

tutto vero quanto hai detto


x Cionci

li dealloco solo al termine della visualizzazione, se li deallochi prima, non li visualizzi più
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 12:10   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da misterx
[b]li dealloco solo al termine della visualizzazione, se li deallochi prima, non li visualizzi più
Ma ne deallochi solo uno perchè tutte le volte con new perdi il puntatore a quello precedente... Ecco dov'è il memory leak...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 12:31   #14
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
hai ragione ma, BCB offre anche questo che dovrebbe ricatturare il vecchio puntatore; almeno credo sia così:



for(int i=0; i < Form2->ComponentCount;i++)
if(Form2->Components[i]->ClassNameIs("TImage"))
{
TImage *img = (TImage*)Form2->Components[i];
delete img;
}
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 13:35   #15
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
ho un dubbio

Quote:
Originariamente inviato da misterx
[b]hai ragione ma, BCB offre anche questo che dovrebbe ricatturare il vecchio puntatore; almeno credo sia così:



for(int i=0; i < Form2->ComponentCount;i++)
if(Form2->Components[i]->ClassNameIs("TImage"))
{
TImage *img = (TImage*)Form2->Components[i];
delete img;
}
ogni qual volta trovi un TImage e lo deallochi, sei sicuro che il vettore Form2->Components rimanga invariato? E se invece cambiasse ogni volta come pure il valore di ComponentCount?
Per essere sicuro in entrambi i casi potresti scrivere il codice in modo da mettere prima i riferimenti ai TImage in un vettore temporaneo e poi ciclare su quello.
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 13:55   #16
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
Re: ho un dubbio

Quote:
Originariamente inviato da Angus
[b]

ogni qual volta trovi un TImage e lo deallochi, sei sicuro che il vettore Form2->Components rimanga invariato? E se invece cambiasse ogni volta come pure il valore di ComponentCount?
Per essere sicuro in entrambi i casi potresti scrivere il codice in modo da mettere prima i riferimenti ai TImage in un vettore temporaneo e poi ciclare su quello.

ho fatto delle prove e ad ogni TImage allocato ho salvato il puntatore su file

quando dealloco, salvo nuovamente su file il puntatore di ogni TImage ritornato dalla:

TImage *img = (TImage*)Form2->Components[i];

sino ad ora, dopo numerose prove, sono sempre i medesimi indirizzi


la morale è che preferisco scrivere questo:

TImage *MyImage;
MyImage = new TImage(Form2);

in luogo di questo:

TImage *MyImage[100];

in quanto, con la prima, alloco memoria in modo dinamico


faccio in questo modo perchè non vorrei sprecare prezioso spazio nella memoria stack

BCB, se non ricordo male, ha di default 2 valori per l'area stack:

min=4Kb
max=100Kb

ma quando compilo non so se crea automaticamente lo spazio necessario per tutte le variabili ed i vettori

qualcuno mi ha detto che in teoria potrei scrivere anche:

TImage *MyImage[1000000]; (un milione) di puntatori di tipo (TImage da 4 byte per puntatore), in quanto è esclusivamente in funzione della memoria del PC

però così facendo sprecherei preziosa memoria

mi ricordo che in turbo C, l'area stack doveva essere impostata con: __stklen(......) o similare


se ho scritto qualche cavolata correggetemi pure
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 16:13   #17
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
che storia!

Quote:
Originariamente inviato da misterx
[b]

ho fatto delle prove e ad ogni TImage allocato ho salvato il puntatore su file

quando dealloco, salvo nuovamente su file il puntatore di ogni TImage ritornato dalla:

TImage *img = (TImage*)Form2->Components[i];

sino ad ora, dopo numerose prove, sono sempre i medesimi indirizzi
Questo farebbe pensare che il vettore Components non tenga conto di quello che gli succede sotto il <vl0... mi spiego: all'inizio il vettore contiene 10 componenti, io ne posso deallocare alcuni e lui continua a dirmi che i componenti sono 10?!? Se così fosse... ROBE DA PAZZI!!!
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }
Angus è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 16:33   #18
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
Re: che storia!

Quote:
Originariamente inviato da Angus
[b]

Questo farebbe pensare che il vettore Components non tenga conto di quello che gli succede sotto il <vl0... mi spiego: all'inizio il vettore contiene 10 componenti, io ne posso deallocare alcuni e lui continua a dirmi che i componenti sono 10?!? Se così fosse... ROBE DA PAZZI!!!

Ho già sperimentato anche questo ed il numero di componenti ritornati è sempre quello corretto.

Stranamente, facendo girare il programma sotto win2k non si hanno i benchè minimi problemi.

Il programma che sto sviluppando, per darti un'idea, è una sorta di ACDSee
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 16:39   #19
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Re: Re: che storia!

Quote:
Originariamente inviato da misterx
[b]Il programma che sto sviluppando, per darti un'idea, è una sorta di ACDSee
Chissà perchè me lo ero immaginato
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2002, 17:04   #20
Angus
Senior Member
 
L'Avatar di Angus
 
Iscritto dal: Dec 2001
Città: Milano
Messaggi: 545
hmmm

Quote:
Originariamente inviato da misterx
[b]

Ho già sperimentato anche questo ed il numero di componenti ritornati è sempre quello corretto.
Cosa intendi per sempre corretto?
Se intendi dire che deallocando un componente il numero dei componenti totali diminuisce di uno, mi domando se quel ciclo for ti vada a pescare TUTTI i TImage. Mi spiego:

Array Components: [Oggetto, TImage, TImage, Oggetto]
ComponentCount = 4;
quando i == 1 cancello il primo TImage.
A questo punto come è fatto Components?

Se fosse così:
[Oggetto, TImage, Oggetto]
ComponentCount = 3;
allora i++ ti porterebbe a saltare un TImage...

Se invece fosse cosà:
[Oggetto, NULL, TImage, Oggetto]
allora li beccheresti tutti.

MAH!

ps: vado a casa, a domani!
__________________
Angus the Hunter @ Realm of magic | Angus Young @ Batracer
°SetiEmperor°| Ninja Technologies
{ qualunque cosa sia, è veloce e fa male (cit.) }
Angus è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
L'aeroplano supersonico ''silenzioso'' N...
Il primo chip a 2 nm di MediaTek sarà a...
Blue Origin lancerà il satellite ...
Roscosmos torna a lanciare capsule verso...
La connettività satellitare anche sui di...
Astronauta italiano sul suolo lunare gra...
Senza formazione ai dipendenti l'IA non ...
Google rende disponibile l'opzione per i...
Oracle licenzia migliaia di persone con ...
Il semaforo bianco sta arrivando: cos'è,...
FRITZ!Repeater 2700 disponibile su Amazo...
Xiaomi TV A Pro: QLED 4K da 65'' con Goo...
Jack Dorsey vuole abolire i manager: 'L'...
Dreame Z10: scopa elettrica senza fili p...
Kingston IronKey Keypad 200C: chiavetta ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:29.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v