我正在使用memcpy將std:vectors <>的內容複製到primitve Arrays。對於像int,float,double等數據類型,它運行良好。當我開始複製一個boolvector時,我遇到了一個問題,即我得到了奇怪的值。爲什麼「std :: vector <bool>」16字節的大小?
首先,我開始做一個矢量浮點的測試輸出:
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;
輸出是:
Sizeof test1[0]: 4
Memoryaddress 0: 02793820
Memoryaddress 1: 02793824
Memoryaddress 2: 02793828
這是我所期望的。浮點大小爲4字節,到下一個浮點值的距離爲4字節。當我這樣做對布爾輸出看起來是這樣的:
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;
輸出是:
Sizeof test[0]: 16
Memoryaddress 0: 011EF94C
Memoryaddress 1: 011EF93C
Memoryaddress 2: 011EF92C
爲什麼是布爾16字節的大小?這對我來說似乎是一種矯枉過正。有解釋嗎?
'&test [0]'不是你認爲的那樣。檢查它的類型! – 2013-04-04 10:57:16
您的標題有誤導性,您從未真正檢查過'std :: vector'的尺寸。 –
jrok
2013-04-04 10:58:04
你不能把'sizeof'的東西比一個字符小。 'sizeof'運算符以字符大小的整數倍返回大小。 – 2013-04-04 10:59:59