QString分配释放分配

时间:2019-03-01 00:08:32

标签: qt qt5

我有一个经常调用的简单QT代码。它必须处理一些数据,然后将其格式化为SELECT depart, arrive FROM mytable t WHERE NOT EXISTS ( SELECT 1 FROM mytable t1 WHERE t1.arrive = t.depart AND t1.depart = t.arrive AND t1.id < t.id ) ,然后将其发送到QString对象。现在,函数每次都会创建一个QwtText对象,其中包含所有动态内存分配工作。然后,该对象将被销毁,并在函数完成后释放内存。

我正在尝试通过创建一个本地类QString变量来优化代码,该变量将保存此格式化的字符串。这个想法是为了防止重复的QString调用。但是,根据第一个malloc/free link返回的数字,在第一次分配字符串之后,似乎QString对象释放并再次分配了内存。

int QString::capacity()

有什么方法可以防止这种重新分配并说服m_valuesLabelText.clear(); // Capacity is 1011 m_valuesLabelText += "<table width=50>"; // Capacity is 16 重用旧缓冲区吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

如您通过阅读源代码所见,

QString::clear会解除分配,例如here

QString::resize不会取消分配,因此可以解决您的问题:yourString.resize(0)

使用QString::reserve分配合适的缓冲区。

答案 1 :(得分:-1)

QString & oftenCalledFunction(BS *bs, QString &p)
{
   p += "assignNew";
}

void func()
{
   QString p(MAX_SIZE); //set MAX_SIZE appropriately.
   BS bs;
   p = oftenCalledFunction(&bs, p);
}

这样,您可以在堆栈上进行分配,从而避免了malloc调用。这有帮助吗? Malloc并不是很糟糕,它不会立即将内存释放回系统。大多数免费商店库在内部实施某种池分配策略。