首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >QString分配释放分配

QString分配释放分配
EN

Stack Overflow用户
提问于 2019-03-01 08:08:32
回答 2查看 250关注 0票数 1

我有一个简单的QT代码,经常被调用。它必须处理一些数据,然后将其格式化为发送到QwtText对象QString。现在,该函数每次都会创建一个包含所有动态内存分配工作的QString对象。然后这个对象被销毁,并在函数完成后释放内存。

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

代码语言:javascript
复制
m_valuesLabelText.clear();
// Capacity is 1011
m_valuesLabelText += "<table width=50>";
// Capacity is 16

有没有办法防止这种重新分配,并说服QString重用旧的缓冲区?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-01 08:35:21

QString::clear解除分配,你可以通过阅读源码看到,例如here

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

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

票数 2
EN

Stack Overflow用户

发布于 2019-03-01 08:47:17

代码语言:javascript
复制
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不是很糟糕,但它不会直接将内存释放回系统。大多数免费存储库在内部实现某种类型的池分配策略。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54936168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档