我正在使用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