Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-10-2011, 11:44   #1
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
[C] Allocazione/Deallocazione memoria

Un saluto a tutti.

Avrei un dubbio sul funzionamento del seguente codice sorgente

Codice:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>

typedef struct _prova {
	long *c;
	char *s;
} prova;


int main() {
  char wait;
  
  printf("creo");
  scanf("%c",&wait);
  prova *p = malloc(sizeof(prova)*1000000);
  
  int i=0;
  for (; i<1000000; i++){
    p[i].c=malloc(sizeof(long));
    p[i].s=malloc(sizeof(char)*10);
  }
  
  printf("creato");
  scanf("%c",&wait);
  for (i = 0; i<1000000; i++){
		free(p[i].c);
		free(p[i].s);
  }
  free(p);
  printf("eliminato");
  scanf("%c",&wait);
}
In pratica creo un vettore di elementi di tipo prova, alloco ciascun elemento e infine li dealloco tutti.

Il problema e' il seguente: guardando il processo associato al sorgente nel task manager, nonostante l'eliminazione di tutto il vettore, vedo che al processo e' associata parecchia memoria (come se la free non funzionasse);
Qualcuno saprebbe spiegarmi il motivo?

Grazie
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 17:16   #2
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
Il problema e' il seguente: guardando il processo associato al sorgente nel task manager, nonostante l'eliminazione di tutto il vettore, vedo che al processo e' associata parecchia memoria (come se la free non funzionasse);
Qualcuno saprebbe spiegarmi il motivo?

Grazie[/quote]

prova con la fflush()
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 17:43   #3
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
provato con Codeblocks 10.05 sotto Windows 7 professional 32 bit ed il processo occupa pochi kb dopo il messaggio di eliminazione del vettore.
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 17:53   #4
Floris
Senior Member
 
L'Avatar di Floris
 
Iscritto dal: Jan 2007
Messaggi: 2267
Se Freaxxx ha ragione, allora può essere che Windows non liberi le pagine occupate dal processo ma non più utilizzate.
__________________
Concluso con:...
Floris è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 17:57   #5
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
per inciso l'ho provato su una macchina con AMD C50, ovvero una macchina con CPU e Northbridge ( e GPU ) integrati in un solo package, quindi il controller di memoria è integrato nel DIE della CPU, i tempi di accesso in memoria sono particolarmente brevi con queste nuove APU/CPU, magari tu lo provi su una piattaforma con controller di memoria esterno e montato sulla scheda madre.
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 18:05   #6
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Quote:
Originariamente inviato da Freaxxx Guarda i messaggi
per inciso l'ho provato su una macchina con AMD C50, ovvero una macchina con CPU e Northbridge ( e GPU ) integrati in un solo package, quindi il controller di memoria è integrato nel DIE della CPU, i tempi di accesso in memoria sono particolarmente brevi con queste nuove APU/CPU, magari tu lo provi su una piattaforma con controller di memoria esterno e montato sulla scheda madre.
si parlerebbe cmq di una differenza dell'ordine dei nanosecondi...
Penso dipenda dal sistema operativo e dal modo in cui alloca (e dealloca) memoria ai programmi. Ma potrebbe dipendere anche dall'ambiente di sviluppo...
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 18:08   #7
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
Quote:
Originariamente inviato da demos88 Guarda i messaggi
si parlerebbe cmq di una differenza dell'ordine dei nanosecondi...
Penso dipenda dal sistema operativo e dal modo in cui alloca (e dealloca) memoria ai programmi. Ma potrebbe dipendere anche dall'ambiente di sviluppo...
in linea teorica si, ma assumendo per vero il fatto che passi per la scheda madre, c'è anche da includere come possibili variabili le prestazioni dei driver del chipset della scheda madre.
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 18:26   #8
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Quote:
Originariamente inviato da Freaxxx Guarda i messaggi
in linea teorica si, ma assumendo per vero il fatto che passi per la scheda madre, c'è anche da includere come possibili variabili le prestazioni dei driver del chipset della scheda madre.
capisco, ma di fatto la gestione della memoria è affidata al kernel dell'OS.
L'hardware è a disposizione diretta del sistema operativo, tratta i dati per quel che sono e non si preoccupa di altro.
Quello che ti dice "gli indirizzi di memoria da 0x00000 a 0x000FF sono allocati" non è l'hardware, ma l'OS. Se l'OS invia un comando di dealloc, quell'area di memoria verrà in ogni caso liberata con una serie di istruzioni che la macchina esegue ad occhi chiusi e l'OS considera quell'area di memoria vuota e quindi non allocata, e anche se l'hardware non l'avesse liberata (penso che tra l'altro l'hardware non faccia niente) non importa, sarà marcata libera.
Le istruzioni di deallocazione sono corrette, probabilmente l'ambiente di sviluppo le tiene allocate perchè magari è in qualche particolare forma di debug.
Quello che voglio dire è che driver, hardware, bios ecc... possono certamente influenzare la velocità di allocazione e deallocazione, ma deallocare 22mB (se ho fatto i conti giusti con puntatori da 32bit) è una operazione da qualche microsecondo pure per un processore 486...
Dipende da come l'ambiente di sviluppo (se il programma viene lanciato da lì) o l'OS decide di gestire l'allocazione (gestione che tra l'altro è, e deve essere, totalmente trasparente al programma e all'utente).
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight

Ultima modifica di demos88 : 22-10-2011 alle 18:30.
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 18:27   #9
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
ops doppio
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 19:12   #10
Freaxxx
Senior Member
 
L'Avatar di Freaxxx
 
Iscritto dal: Dec 2006
Messaggi: 3808
Quote:
Originariamente inviato da demos88 Guarda i messaggi
capisco, ma di fatto la gestione della memoria è affidata al kernel dell'OS.
L'hardware è a disposizione diretta del sistema operativo, tratta i dati per quel che sono e non si preoccupa di altro.
Quello che ti dice "gli indirizzi di memoria da 0x00000 a 0x000FF sono allocati" non è l'hardware, ma l'OS. Se l'OS invia un comando di dealloc, quell'area di memoria verrà in ogni caso liberata con una serie di istruzioni che la macchina esegue ad occhi chiusi e l'OS considera quell'area di memoria vuota e quindi non allocata, e anche se l'hardware non l'avesse liberata (penso che tra l'altro l'hardware non faccia niente) non importa, sarà marcata libera.
Le istruzioni di deallocazione sono corrette, probabilmente l'ambiente di sviluppo le tiene allocate perchè magari è in qualche particolare forma di debug.
Quello che voglio dire è che driver, hardware, bios ecc... possono certamente influenzare la velocità di allocazione e deallocazione, ma deallocare 22mB (se ho fatto i conti giusti con puntatori da 32bit) è una operazione da qualche microsecondo pure per un processore 486...
Dipende da come l'ambiente di sviluppo (se il programma viene lanciato da lì) o l'OS decide di gestire l'allocazione (gestione che tra l'altro è, e deve essere, totalmente trasparente al programma e all'utente).
perché, i driver che cosa sono se non moduli software per il kernel alla fine della fiera? specialmente quelli critici come quelli per il chipset; il tuo computer non fa altro che eseguire istruzioni, è una macchina stupida, ha di buono che è veloce e rispetta una sequenza operativa, ma da come scrivi sembra quasi che tu possa demandare tutto al kernel tanto da quel punto in poi sarà tutto chiaro, pulito e sicuro: ma anche no.

per quanto riguarda le varie modalità debug e i motivi per i quali non liberare subito una porzione di memoria non mi esprimo perché sono ovviamente tante le possibilità; magari prova anche tu con codeblocks.
Freaxxx è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 19:54   #11
tecno789
Senior Member
 
L'Avatar di tecno789
 
Iscritto dal: Jan 2010
Città: (MB)
Messaggi: 11971
se si programma sotto windows questi problemi di memoria si verificano spesso.
sotto linux non ho mai visto questi problemi. Il codice mi sembra giusto, e quindi se lo testi su una macchina linux dovrebbe filare tutto liscio.
__________________
CPU: Ryzen 3700x DISSY: CM HYPER EVO 212 RAM: 16gb DDR4 3000Mhz MOBO: MSI b350 tomahawk VGA: MSI Ventus 2X 4060TI 16GB ALI: Cooler Master V550 SSD: Samsung 970 Evo Plus Trattive+:(a) topolino2808(x2), galfum, giap959, sm_morgan, Biduzzo, huangwei, maxmax80, bubbi, dinamite2, PaxNoctis;(v) rubrie, CubeDs, Slater91, Juvanni, FireFox152, gluvocio, giulio81, emahwupgrade, Velvet, semmy83, giocher03
tecno789 è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2011, 20:26   #12
demos88
Senior Member
 
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
Quote:
Originariamente inviato da Freaxxx Guarda i messaggi
perché, i driver che cosa sono se non moduli software per il kernel alla fine della fiera? specialmente quelli critici come quelli per il chipset; il tuo computer non fa altro che eseguire istruzioni, è una macchina stupida, ha di buono che è veloce e rispetta una sequenza operativa, ma da come scrivi sembra quasi che tu possa demandare tutto al kernel tanto da quel punto in poi sarà tutto chiaro, pulito e sicuro: ma anche no.

per quanto riguarda le varie modalità debug e i motivi per i quali non liberare subito una porzione di memoria non mi esprimo perché sono ovviamente tante le possibilità; magari prova anche tu con codeblocks.
Io posso solo basarmi su quello che ho studiato nei vari corsi universitari e conoscenze personali, e francamente se la MMU hardware arrancasse sarebbe molto grave xD
Penso che sia un qualche passaggio nella gestione ad alto livello (software) della memoria, probabilmente una scelta implementativa, ma concordo che stiamo parlando del sesso degli angeli, ci sono troppe variabili da considerare
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight
demos88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2011, 14:19   #13
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da Freaxxx Guarda i messaggi
perché, i driver che cosa sono se non moduli software per il kernel alla fine della fiera? specialmente quelli critici come quelli per il chipset; il tuo computer non fa altro che eseguire istruzioni, è una macchina stupida, ha di buono che è veloce e rispetta una sequenza operativa, ma da come scrivi sembra quasi che tu possa demandare tutto al kernel tanto da quel punto in poi sarà tutto chiaro, pulito e sicuro: ma anche no.

per quanto riguarda le varie modalità debug e i motivi per i quali non liberare subito una porzione di memoria non mi esprimo perché sono ovviamente tante le possibilità; magari prova anche tu con codeblocks.
L'hardware non ha il concetto di memoria libera od occupata, tantomento il driver del chipset. La memoria che vedi come occupata e' la memoria che il SO ha assegnato al processo. Tieni presente inoltre che tu non vai a prendere la memoria direttamente dal kernel, malloc/free non sono chiamate di sistema ma di libreria. Queste non si limitano ad allocare/liberare memoria, ma fanno diversi giri per cose come cercar di minimizzare la frammentazione, ad esempio cercando di riciclare memoria che e' stata liberata.
Se c'e' da cercare una causa per la memoria che non viene liberata, i primi indiziati sono proprio malloc/free (modalita' di debug, flag di compilazione etc.)
Detto questo su VS2010 e Windows 7 funziona regolarmente. Con che Compilatore/SO ti accade ?
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
Old 24-10-2011, 23:16   #14
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
Ringrazio tutti per le diverse risposte.
Quindi il codice sorgente è corretto.

Non ho specificato, sto sviluppando un progetto in C sotto ambiente unix, più precisamente:
ubuntu 10.04
kernel 2.6.35-30-generic

L'hardware su cui sto provando è il seguente:
processore: core i5-460m
memoria: 4gb ram

Non ho ancora provato a fare la fflush, ora vedo se mi risolve questo problema.

Ad ogni modo, potrebbe essere che il processo libera la memoria, tuttavia se la "tiene" riservata per future allocazioni??

Ringrazio tutti
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2011, 11:48   #15
marco.r
Senior Member
 
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
Quote:
Originariamente inviato da nico88desmo Guarda i messaggi
Ad ogni modo, potrebbe essere che il processo libera la memoria, tuttavia se la "tiene" riservata per future allocazioni??
Si', e' quello che dicevo precedentemente.
Il riuso della memoria allocata e poi liberata e' una delle tecniche utilizzate da una malloc per migliorare le performance.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele
marco.r è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Puoi giocare ad Halo in Minecraft? Sì, s...
WhatsApp: in fase di test l'introduzione...
XPeng G9 MY26 segna il record europeo pe...
Apple corregge due gravi vulnerabilit&ag...
DC Comics batte al cinema Marvel per la ...
L'iPhone più sottile di sempre scende di...
Saros di Housemarque punta ad offrire un...
La statale cinese FAW entra in Leapmotor...
Rinnova il PC spendendo meno: super offe...
Windows 11: Microsoft riduce l'uso di RA...
I 4 smartphone più venduti su Ama...
Samsung SDI testa una batteria silicon-c...
Volete un robot senza compromessi? DREAM...
CATL conferma un uso massiccio di batter...
Ripartono le offerte DJI: Neo torna a 14...
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: 14:09.


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