Sto usando memcpy per copiare il contenuto di std: vettori <> per primitve array. Per i tipi di dati come int, float, double etc. ha funzionato bene. Quando ho iniziato a copiare un boolvector ho riscontrato un problema, ovvero ho ottenuto strani valori.Perché la dimensione di "std :: vector <bool>" 16 Byte?
Prima ho iniziato a fare un uscita di test per un vettore float:
std::vector<float> test1 (3,0);
cout << "Sizeof test1[0] : " << sizeof(test1[0]) << endl
<< "Memoryaddress 0: " << &test1[0] << endl
<< "Memoryaddress 1: " << &test1[1] << endl
<< "Memoryaddress 2: " << &test1[2] << endl;
L'output è:
Sizeof test1[0]: 4
Memoryaddress 0: 02793820
Memoryaddress 1: 02793824
Memoryaddress 2: 02793828
e questo è quello che mi aspetto. La dimensione float è 4 byte e la distanza dal valore float successivo è 4 byte. Quando faccio questo per bool l'output è simile al seguente:
std::vector<bool> test (3,0);
cout << "Sizeof test[0]: " << sizeof(test[0]) << endl
<< "Memoryaddress 0: " << &test[0] << endl
<< "Memoryaddress 1: " << &test[1] << endl
<< "Memoryaddress 2: " << &test[2] << endl;
L'output è:
Sizeof test[0]: 16
Memoryaddress 0: 011EF94C
Memoryaddress 1: 011EF93C
Memoryaddress 2: 011EF92C
Perché le dimensioni dei bool 16 byte? Sembra un totale esagerazione per me. Ci sono spiegazioni per questo?
'& test [0]' non è quello che pensi che sia. Controlla il suo tipo! –
Il titolo è fuorviante, non si controlla mai effettivamente la dimensione di 'std :: vector'. –
jrok
Non puoi prendere il valore 'sizeof' che è più piccolo di un carattere. L'operatore 'sizeof' restituisce la dimensione in multipli interi della dimensione di un carattere. –