我想存储1000个矩形的3个属性。我可以用两种不同的方式做到这一点。我可以使用结构或数组,但我试图找出哪个解决方案使用最少的内存。代码如下:
struct Figure {
unsigned int color;
virtual void foo() {}
};
struct Rectangle : public Figure {
unsigned int width,height;
};
int main() {
Rectangle r[1000];
unsigned int r2[1000][3]; //This take less memory, The first entry is rectangle number
// the next is color, width and height
std::cout<<"Type name is "<< typeid(r[0]).name() <<sizeof(r2)<<" "<<sizeof(r)<<std::endl;
return 0;
}
输出结果为:
类型名称为9Rectangle12000 24000
正如您所看到的,结构对象数组使用的内存是普通数组的两倍。为什么会这样? 我期望在我的情况下,由于多态结构,我的情况下的结构数组将使用更多的内存,但不是那么多。
答案 0 :(得分:2)
你的struct有虚函数,所以那里有一个vptr。
成员之间和/或结构末尾可能存在填充以进行对齐。