我正在编写一个嵌入式应用程序。在某些地方,我经常使用std::ostringstream,因为它对我来说非常方便。但是,我刚刚发现性能下降是极端的,因为向流中添加数据会导致对malloc和free的大量调用。有什么办法可以避免呢?

我的第一个想法是使ostringstream静态化,并使用ostringstream::set(“”)对其进行重置。但是,这无法完成,因为我需要重新进入函数。

最佳答案

好吧,Booger的解决方案是切换到sprintf()。这是不安全的,而且容易出错,但是通常更快。

并非总是如此。初始化后,我们不能在我的实时作业上使用它(或ostringstream),因为它们都执行内存分配和释放。

我们解决该问题的方法是跳过很多麻烦,以确保在启动时执行所有字符串转换(此时我们还不必实时)。我确实认为在一种情况下,我们将自己的转换器写入固定大小的堆栈分配数组中。我们在规模上有一些限制,我们可以依靠这些特定的转化。

对于更通用的解决方案,您可以考虑编写自己的版本的ostringstream,该版本使用固定大小的缓冲区(当然,需要对保留在其中的边界进行错误检查)。这将需要一些工作,但是如果您有很多这些流操作,那可能是值得的。

关于c++ - 有没有办法减少ostringstream malloc/free的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2358056/

10-12 18:49