我有一个经常调用的简单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
重用旧缓冲区吗?
谢谢。
答案 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并不是很糟糕,它不会立即将内存释放回系统。大多数免费商店库在内部实施某种池分配策略。