c++ - 如何在 C++ 中对静态缓冲区执行字符串格式化?

标签 c++ string performance ostringstream

我正在处理一段对性能要求非常高的代码。我需要执行一些格式化的字符串操作,但我试图避免内存分配,甚至是内部库的内存分配。

在过去,我会做类似以下的事情(假设 C++11):

constexpr int BUFFER_SIZE = 200;
char buffer[BUFFER_SIZE];
int index = 0;
index += snprintf(&buffer[index], BUFFER_SIZE-index, "Part A: %d\n", intA);
index += snprintf(&buffer[index], BUFFER_SIZE-index, "Part B: %d\n", intB);
// etc.

我更愿意使用所有 C++ 方法(例如 ostringstream)来执行此操作,而不是旧的 C 函数。

我意识到我可以使用 std::string::reserve 和 std::ostringstream 提前获取空间,但这仍然会执行至少一次分配。

有人有什么建议吗?

提前致谢。

最佳答案

Does anyone have any suggestions?

是的,使用 std::ostrstream。我知道它已被弃用。但我发现它对于输出到静态缓冲区很有用。如果发生异常,则不会出现内存泄漏。 根本不分配内存。

#include <strstream> // for std::ostrstream
#include <ostream>   // for std::ends
// :

constexpr int BUFFER_SIZE = 200;
char buffer[BUFFER_SIZE];
std::ostrstream   osout(buffer, sizeof(buffer));
osout << "Part A: " << intA << "Part B: " << intB << std::ends;

关于c++ - 如何在 C++ 中对静态缓冲区执行字符串格式化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51162346/

相关文章:

c++ - 使用 MySQL C++ Connector 解析 undefined reference

Python将音频流PCM字符串高效转换为数组,重复使用

php - 使用 WHERE 或 PHP 从 MySQL 过滤数据?

performance - 为什么我无法在 32 位和 64 位 JVM 上观察到相同的性能改进?

c++ - C/C++ Performance Globals 与 Get/Set 方法

c++ - 创建 Linux GUI 元素我需要知道什么

c++ - 在打印 vector 内容时添加空格和新行

c++ - std::multimap 真的只是嵌套 vector 吗

ruby - 多字节字符和 tr 命令

r - 在 R 中解码字符串向量