Newsgroup: it.comp.programmare.win32
Titolo: Allocazione dinamica

Per allocare dinamicamente memoria ho sempre usato le funzioni classiche del
C
(malloc,realloc,free) senza avere mai problemi.
Nell'ultimo testo che ho letto sulla programmazione Win32(Programmazione
avanzata per Windows di Jeffrey Richter Microsoft Press) nell'affermare
l'assoluta inefficienza delle vecchie funzioni (GlobalAlloc etc....)  e
quindi ,implicitamente, anche delle funzioni C classiche ,  consiglia di
usare le funzioni degli heap.
Ho provato a modificare alcuni miei programmi utilizzando HeapCreate
,HeapAlloc etc..,ma non riscontro differenze notevoli.
Cosa ne pensate?
Grazie.

usare le funzioni degli heap.
"implicitamente" da parte di chi ?
Le funzioni malloc() & C. sono standard.
Questo significa che la loro implementazione specifica potrebbe
poggiarsi sulle funzioni specifiche del sistema operativo (vedi
VirtualAlloc, ecc...) cosi' come, d'altronde, gia' fa Delphi.
Quindi non vedo perche' non usarle.
--
Andrea Laforgia (UIN 87230455)
----------------------------------------------------------
Non scrivetemi per e-mail, se non richiesto espressamente.
No replies in private e-mail, unless explicitly requested.
----------------------------------------------------------

Per quanto ne so io, sull'MSDN si parla della inefficienza delle GlobalAlloc
ma non delle funzioni C standard.
Anzi, c'e' un articolo proprio sull'MSDN che suggerisce di utilizzare
funzioni di Heap Win32 o CRT a seconda dei "propri gusti" (se si vuole un
codice portabile naturalmente bisogna utilizzare le funzioni CRT).
L'articolo e' un po' vecchiotto e confronta le varie GlobalAlloc con le
funzioni CRT: "Managing Heap Memory in Win32" di Randy Kath (1993).
Ora, se si vuole applicare una proprieta' "transitiva" allora e' vero che se
le nuove funzioni di gestione dell'Heap sono piu' efficienti delle vecchie
VirtualAlloc... e che queste ultime erano da paragonarsi a quelle del CRT
...
Credo di aver capito (ma prendete quanto vi sto dicendo con le molle) che il
vantaggio che si ottiene utilizzando HeapCreate & C viene dal fatto che si
possa allocare una grossa porzione di memoria tutta d'un colpo grazie al
parametro dwInitialSize, quindi chiamando successivamente le funzioni
HeapAlloc in realta' l'allocazione e' gia' stata fatta e si reindirizza
soltanto il puntatore.
Michele


 "implicitamente" da parte di chi ?
da parte dell'autore del libro " Jeffrey Richter ".
Personalmente continuo ad usare le funzioni del C .
Salvo.

 Michele
Grazie per la tua opinione.
Salvo

Personalmente continuo ad usare le funzioni del C .
"nell'affermare l'assoluta inefficienza delle vecchie funzioni
(GlobalAlloc etc....) e quindi ,implicitamente, anche delle funzioni C
classiche"
Il "quindi" l'hai aggiunto tu ? :)
Mi riporti il passo in cui Richter afferma di non usare le funzioni C
classiche ?


 classiche ?
Si, il "quindi" l'ho aggiunto io;
pag. 299 "Programmazione avanzata per Windows" di Richter:
..."se si sta sviluppando una nuova applicazione a 32 bit raccomando di non
usare le funzioni per la memoria globale e locale : sono più lente e
generano un maggiore sovraccarico rispetto alle nuove funzioni degli heap di
win 32".
Avendo letto in "Programmare Windows 95" di Charles Petzold la perfetta
equivalenza tra GlobalAlloc & C  e  malloc & C  sono arrivato alla
conclusione "implicita" che le nuove funzioni degli heap siano da preferire
alle classiche del C.
Aggiungo, per NON portare acqua al mio mulino, che Viktor Toth in
"Programmare in Windows 98/NT" nel paragrafo relativo all'allocazione della
memoria testualmente afferma:
" In un'applicazione win 32, allocate la memoria con malloc o new ,
rilasciatela con free o delete  e lasciate che sia il sistema a preoccuparsi
di tutti gli aspetti legati alla gestione della memoria. Per la maggior
parte delle applicazioni questo approccio è perfettamente adeguato".

 wrote in message ...


parte delle applicazioni questo approccio è perfettamente adeguato".
Difatti, conferma la mia teoria ;)


 usare le funzioni degli heap.
Le funzioni di alloc.h usano appunto le funzioni degli heap di Win32. A
parte le caratteristiche "aggiuntive" che ti possono fornire queste
ultime, sono perfettamente equivalenti.
---
Bye! Lorenzo Lutti
http://www.geocities.com/SiliconValley/Peaks/6258/

 Lo immaginavo ;)
Grazie per la tua opinione.
Salvo


Grazie ,
Salvo

Le funzioni di alloc.h usano appunto le funzioni degli heap di Win32.
Ehm... alloc.h di *quale* compilatore ? ;)
alloc.h non e' un header standard :)


 alloc.h non e' un header standard :)
Boooo, scuuusa, ovviamente volevo dire malloc.h. :)
Se invece di fare la punta avessi indicato l'header standard, mi avresti
risparmiato un messaggio. :)


Boooo, scuuusa, ovviamente volevo dire malloc.h. :)
Neanche malloc.h e' standard ;)
L'header giusto e' stdlib.h
--
Andrea Laforgia (ICQ 87230455)
------------------------------ 
#exclude <windows.h>

 L'header giusto e' stdlib.h
Veramente malloc.h e` standard ANSI, compare persino nel K&R.


Veramente malloc.h e` standard ANSI, compare persino nel K&R.
Hai ragione ;))
