Newsgroup: it.comp.lang.c++
Titolo: inizializzare memoria

se alloco della memoria con malloc quale č il metodo piů semplice e piů
veloce a run-time per inizializzarla tutta a zero (ho una struct contenente
molti tipi diversi)
pensavo di castare il puntatore a char* e poi con un bel ciclo for fare
struttura[contatore] = 0x00; ma forse ci sono altri metodi migliori...
--
CAFxXcrossway -> 
www.cafxx.cjb.net

 struttura[contatore] = 0x00; ma forse ci sono altri metodi migliori...
Se allochi la memoria con malloc allora lo chiedi in it.comp.lang.c :-)
In c++ dovresti usare new.
Se la allochi con malloc allora la cosa più veloce è allocarla con calloc
che provvederà ad azzerarla :-)
Se invece proprio la allochi con malloc, una bella memset(ptr,
size_t_quanta_memoria_ho_allocato, 0) dovrebbe andare benissimo! (è più
veloce el ciclo normale, perchè accorpa i bytes in gruppi della dimensione
della parola del processore, quindi 32bits su Intel)
--- bye

 ha scritto nel messaggio
news:cDE4c.48343$O31.2...@news4.tin.it...


 molti tipi diversi)
Il modo migliore in C++ è *non usare* malloc.
Il grande vantaggio dell'operatore new è proprio quello di creare oggetti
già inizializzati.
Guarda l'esempio veloce che ti allego.
#include <iostream>
#include <iterator>
#include <algorithm>
struct mia_struct
{
        int a;
        double x;
        bool i;
        mia_struct() : a(1),x(2.2),i(false) { }
        mia_struct(int A,double X,bool I) : a(A),x(X),i(I) { }
};
std::ostream& operator<<(std::ostream& out, const mia_struct& s)
{
        return out << s.a << " " << s.x << " " << s.i;
}
int main()
{
        const unsigned int N=10;
        mia_struct *vc;
        // alloca un'array di mia_struct (e chiama il costruttore)
        vc=new mia_struct[N];
        // stampa il risultato a video
        std::copy(vc, vc+N,std::ostream_iterator<mia_struct>(std::cout,
"\n"));
        // ora riempie l'array con un valore predefinito
        std::fill(vc,vc+N,mia_struct(-2,-3.3,true));
        std::copy(vc, vc+N,std::ostream_iterator<mia_struct>(std::cout,
"\n"));
        // rimuove l'array
        delete [] vc;
        return 0;
}
al momento della creazione dell'array, mediante l'uso dell'operatore new, il
costruttore viene chiamato ed inizializza la strutture al suo valore.
Esiste comunque la possibilità di riempire ogni elemento dell'array con un
valore desiderato, mediante la funzione della standard template library
fill.
In questo caso va bene usare il costruttore copia di default che crea il
compilatore, in generale facendo uso di algoritmi e container stl (non
presenti in questo esempio), è bene valutare un costruttore di copia
opportuno, idoneo alle classi del nostro progetto.
Ciao,
Paolo Ferraresi.

 writes:
CAFxX> se alloco della memoria con malloc quale č il metodo piů
CAFxX> semplice e piů veloce a run-time per inizializzarla tutta a
CAFxX> zero
CAFxX> pensavo di castare il puntatore a char* e poi con un bel ciclo for fare
CAFxX> struttura[contatore] = 0x00; ma forse ci sono altri metodi migliori...
Che brutta cosa, non sono educate le domande senza i punti di domanda,
massi`, per 'sta volta: bzero
Saluti,
MARco
-- 
x(t),y(t) = th(3t-34.5)*e^[-(3t-34.5)^2]/2-4.3+e^(-1.8/t^2)/(.8*atg(t-
3)+2)(t-1.8)-.3th(5t-42.5),(1.4e^[-(3t-34.5)^2]+1-sgn[|t-8.5|-.5]*1.5*
|sin(pi*t)|^[2e^(-(t-11.5)^2)+.5+e^(-(.6t-3.3)^2)])/(.5+t)+1  ; 0<t<14

 costruttore viene chiamato ed inizializza la strutture al suo valore.
Ma se devo creare stringhe C-style come faccio ad azzerare l'array di char?
New se ne occupa o devo fare un ciclo for io?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 New se ne occupa o devo fare un ciclo for io?
Perche' lo azzeri? Non e' un'operazione inutile? Io mi limiterei a
impostare a zero il primo elemento (e comunque userei std::string).
Ciao,
Nicola