快速C++字符串输出

woo*_*666 5 c c++ string performance concatenation

我有一个程序从FPGA输出数据.由于数据变化非常快,我正在努力提高程序的速度.现在我打印这样的数据

for (int i = 0; i < 100; i++) {
    printf("data: %d\n",getData(i));
}
Run Code Online (Sandbox Code Playgroud)

我发现使用一个printf可以大大提高速度

printf("data: %d \n data: %d \n data: %d \n",getData(1),getData(2),getData(3));
Run Code Online (Sandbox Code Playgroud)

但是,正如你所看到的,它非常凌乱,我不能使用for循环.我首先尝试连接字符串sprintf,然后立即打印所有字符串,但它和第一种方法一样慢.有什么建议?

编辑:我已经首先打印到文件,因为我意识到控制台滚动将是一个问题.但它仍然太慢.我正在为外部FPGA调试内存控制器,因此越接近实际速度越好.

seh*_*ehe 6

如果你正在写stdout,你可能无法影响这一切.

否则,设置缓冲

现在,Boost Karma的表现非常出色.但是,我需要了解有关输入数据的更多信息.

同时,尝试手动缓冲您的写入:在Coliru上生活

#include <stdio.h>

int getData(int i) { return i; }

int main()
{
    char buf[100*24]; // or some other nice, large enough size
    char* const last = buf+sizeof(buf);
    char* out = buf;

    for (int i = 0; i < 100; i++) {
        out += snprintf(out, last-out, "data: %d\n", getData(i));
    }

    *out = '\0';
    printf("%s", buf);
}
Run Code Online (Sandbox Code Playgroud)


woo*_*666 5

哇,我不敢相信我之前没有这样做。

const int size = 100;
char data[size];
for (int i = 0; i < size; i++) {
    *(data + i) = getData(i);
}

for (int i = 0; i < size; i++) {
    printf("data: %d\n",*(data + i));
}
Run Code Online (Sandbox Code Playgroud)

正如我所说,printf这是瓶颈,而且sprintf也没有多大改进。所以我决定直到最后才避免任何类型的打印,而是使用指针