小编nga*_*yan的帖子

当输入缓冲区是一个非常大的字符时,std::stoul() 需要很长时间*

我有一个大小为 1024^3 (1G) 的 char* buf。它包含换行符分隔的十六进制数字 ( 7fefdfff7\n7fefdfff8\n7fefdfff9\n7fefdfff\n7fefdfffb),我正在尝试读取和解析它们中的每一个。

我的第一种方法是:

int buf_length = 1024 * 1024 * 1024;
char *buf = new char[buf_length];
std::size_t numchars = 0;
for (int offset = 0; offset <buf_length; offset += numchars) {
        unsigned long tmp = std::stoul(&buf[offset], &numchars, 16);
        process(tmp);
}
Run Code Online (Sandbox Code Playgroud)

但是循环的每次迭代都花费了异常长的时间。一旦我切换到以下内容,它的速度要快得多:

int buf_length = 1024 * 1024 * 1024;
char *buf = new char[buf_length];
std::size_t numchars = 0;
for (int offset = 0; offset <buf_length; offset += numchars) {
// omitting size of …
Run Code Online (Sandbox Code Playgroud)

c++ performance

0
推荐指数
1
解决办法
62
查看次数

标签 统计

c++ ×1

performance ×1