内存增加和字符串流?

时间:2018-09-12 23:52:05

标签: c++

根据一个有关在屏幕上编写动态文本的教程,我得到了有关std::stringstream的知识,并且您现在应该使用它,但是我认为有更好的解决方案,因为有人说stringstream不好在内存中。该教程从未完成,但是不幸的是,作为一个初学者,这就像是被遗忘在海洋中而没有船。我的程序的进程内存不断增加,并且在运行5分钟后,进程内存最高可达到1GB。我想了解更多有关游戏中动态文本的信息,以及stringstream是否引起此问题

std::stringstream ss;
if (carrotCount < 20) { ss << "Carrots Found: " << carrotCount; }
else { ss << "Found All Carrots!"; }
label.getComponent<UILabel>().SetLabelText(ss.str(), "comic");

1 个答案:

答案 0 :(得分:1)

每一个用于stringstream变量的'<<'运算符都会使后者为操作数分配内存。您使用的运算符越多,将分配更多的内存。

但是,当stringstream var被销毁时,它分配的所有内存都将释放回系统。这是释放内存的最简单方法。

通常,流var在函数范围内分配,在函数中使用,并在返回时自动销毁。这样,您就可以控制内存使用情况。

string getstring() {
    stringstream ss;
    ss << 12 << " nights " << ...;
    return ss.str();
}

上面的函数将创建字符串流,使用一些内存来创建字符串并将其销毁。

如果使var为全局变量并继续向其流操作数,则可能会出现问题。相比之下,它很容易表现为内存泄漏,并且每次都会占用越来越多的内存。因此,请不要这样做。或使用其他方法来清理或重用其内存(例如,重新分配或重用streambuf)。