Joh*_*ski 8 c++ memory stl stringstream ostringstream
我正在写一个嵌入式应用程序.在某些地方,我经常使用std :: ostringstream,因为它对我来说非常方便.但是,我刚刚发现性能受到了极大的影响,因为向流中添加数据会导致大量调用malloc和free.有什么办法可以避免吗?
我的第一个想法是使ostringstream静态并使用ostringstream :: set("")重置它.但是,由于我需要函数可重入,因此无法完成此操作.
嗯,Booger的解决方案是切换到sprintf(). 它不安全且容易出错,但通常速度更快。
但并不总是如此。初始化后我们无法在实时作业中使用它(或 ostringstream),因为两者都执行内存分配和释放。
我们解决这个问题的方法是跳过很多麻烦,以确保我们在启动时执行所有字符串转换(当我们还不需要实时时)。我确实认为有一种情况,我们将自己的转换器写入固定大小的堆栈分配数组中。对于所涉及的特定转换,我们对大小有一些限制。
对于更通用的解决方案,您可以考虑编写自己的 ostringstream 版本,它使用固定大小的缓冲区(当然,对所保留的边界进行错误检查)。这将需要一些工作,但如果您有很多这样的流操作,那么可能是值得的。