c++ - 与 c++ 中的数组相比,为什么一个类使用这么多内存
问题描述
我想存储 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
如您所见,结构的对象数组使用的内存是普通数组的两倍。为什么会这样?由于多态结构,我预计在我的情况下结构数组会使用更多内存,但不会那么多。
解决方案
你的结构有虚函数,所以里面有一个 vptr 。
出于对齐目的,成员之间和/或结构末尾可能存在填充。
推荐阅读
- angular - Primeng Autocomplete - 不使用 Angular 中的反应形式修补值
- elasticsearch - Filebeat 缓冲区控制
- tomcat - 如何将流量从 Nginx 入口路由到应用程序 Tomcat 服务器
- jmeter - 使用 Jmeter 连接雪花 JDBC 连接器时收到错误
- r - 识别事件前后的行
- java - 如何在数据库连接中正确使用 try-with-resources?
- firebase - 谷歌云功能:无法加载默认凭据
- weblogic - com.oracle.weblogic.lifecycle.core.PartitionLCMService 错误
- php - Eloquent Query Builder 中的 Laravel 分页
- javascript - 编辑列表中的元素