我有一个大小为 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)