C++ sizeof()与[]和.data()的结果不同 const GLfloat tmpArray[]={ -1.0f,-1.0f,0.0f, 1.0f,-1.0f,0.0f, 0.0f,1.0f,0.0f, }; std::cerr
C++ sizeof()与[]和.data()的结果不同 const GLfloat tmpArray[]={ -1.0f,-1.0f,0.0f, 1.0f,-1.0f,0.0f, 0.0f,1.0f,0.0f, }; std::cerr,c++,C++,sizeof(tmpArray)返回预期的数组大小 sizeof(tmpVector.data())返回data()方法返回的内容的大小,该方法是指针(GLfloat*)。在64位平台上,指针的大小为8字节 我该如何使这些尺寸匹配 考虑使用(tmpVector.size()*sizeof(FLfloat)) 向量元素是连续存储的,就像数组元素一样。请记住sizeof()是一个编译时常量。这里您得到的是指针的大小:sizeof(tmp.data())但是数组的sizeof不会给出数组中第一个指针的
sizeof(tmpArray)
返回预期的数组大小
sizeof(tmpVector.data())
返回data()
方法返回的内容的大小,该方法是指针(GLfloat*
)。在64位平台上,指针的大小为8字节
我该如何使这些尺寸匹配
考虑使用(tmpVector.size()*sizeof(FLfloat))
向量元素是连续存储的,就像数组元素一样。请记住
sizeof()
是一个编译时常量。这里您得到的是指针的大小:sizeof(tmp.data())
但是数组的sizeof不会给出数组中第一个指针的大小吗?是什么让他们不同?不,不会。静态数组的sizeof()
在编译时已知。函数的作用是:返回一个指针。关键是@derhass刚刚提到的。静态数组不是指针。数组不是指针谢谢,我想当我使用OpenGL开发时,我必须多读一点关于数组的内容,并继续使用它们,因为它在这类东西上使用了很多sizeof。注意:在我的Lubuntu 18.04 64位桌面上,使用g++v7.3:(A)使用tmpVector.size()==0(即空),sizeof(tmpVector)报告24个字节,无论元素类型(b)如何,tmpVector.size()报告1000个元素,sizeof(tmpVector)报告24个字节,。vector自动内存(~stack)对象是24字节的项,用于管理堆中的数据内容。虽然9 x 4字节浮点数组占用36字节的自动内存,但tmpStack只占用24字节的自动(~stack)内存,而36字节位于更大的(~4Gbytes)堆中。
const GLfloat tmpArray[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
std::cerr << sizeof(tmpArray) << std::endl;
std::vector<GLfloat> tmpVector {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
std::cerr << sizeof(tmpVector.data()) << std::endl;
const GLfloat tmpArray[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
cerr << "\n sizeof(tmpArray) : "
<< sizeof(tmpArray) << endl;
vector<GLfloat> tmpVector {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
cerr << "\n sizeof(tmpVector.data()) "
<< sizeof(tmpVector.data()) << endl;
cerr << "\n tmpVector.size() * sizeof(GLfloat) : "
<< tmpVector.size() * sizeof(GLfloat) << endl;
sizeof(tmpArray) : 36
sizeof(tmpVector.data()) 8
tmpVector.size() * sizeof(GLfloat) : 36