为什么我按如下方式填写QVector:
QVector< QPair<qint32, QString> > vector(10000000);
QString temp;
for (int i = 0; i < 10000000; ++i)
{
temp = QString::fromUtf8("Vasya");
vector.replace(i, qMakePair(i, temp));
}
我的程序使用470 MB的RAM,当这个:
QVector< QPair<qint32, QString> > vector(10000000);
QString temp2 = "Vasya";
for (int i = 0; i < 10000000; ++i)
{
vector.replace(i, qMakePair(i, temp2));
}
只有90 MB的RAM?
答案 0 :(得分:2)
因为内部QString
已经过优化,可以共享const对象的内存。每次调用fromUtf8
时,第一种情况都需要分配内存。在相反的第二种情况下,总是可以重用现有const temp2