我有一个简单的QT代码,经常被调用。它必须处理一些数据,然后将其格式化为发送到QwtText
对象QString
。现在,该函数每次都会创建一个包含所有动态内存分配工作的QString
对象。然后这个对象被销毁,并在函数完成后释放内存。
我正在尝试通过创建一个本地类QString
变量来优化代码,该变量将保存此格式化字符串。这样做是为了防止重复的malloc/free
调用。然而,根据int QString::capacity()
link返回的数字判断,在第一次字符串赋值之后,QString
对象似乎再次释放并分配了内存。
m_valuesLabelText.clear();
// Capacity is 1011
m_valuesLabelText += "<table width=50>";
// Capacity is 16
有没有办法防止这种重新分配,并说服QString
重用旧的缓冲区?
谢谢。
发布于 2019-03-01 08:35:21
QString::clear
解除分配,你可以通过阅读源码看到,例如here。
QString::resize
不会解除分配,因此它可以解决您的问题:yourString.resize(0)
。
使用QString::reserve
分配合适的缓冲区。
发布于 2019-03-01 08:47:17
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不是很糟糕,但它不会直接将内存释放回系统。大多数免费存储库在内部实现某种类型的池分配策略。
https://stackoverflow.com/questions/54936168
复制相似问题