C 优化文本文件解析器以提高速度
我正在编写一个函数,用于解析C中的文本文件。该文本文件包含以下形式的数千个参数:C 优化文本文件解析器以提高速度,c,file,parsing,text,C,File,Parsing,Text,我正在编写一个函数,用于解析C中的文本文件。该文本文件包含以下形式的数千个参数: parameter=1,6,3,6 another_parameter=1,45,2,3 为了逐行解析文本文件,我使用问题的答案 使用下面的代码,已经可以快速解析文本文件。然而,我希望进一步提高它的速度。有人有什么可以进一步优化的建议吗 void ConfigReader_ScanInt16x4 (const char *token, const char *format, int16_t *res1, int
parameter=1,6,3,6
another_parameter=1,45,2,3
为了逐行解析文本文件,我使用问题的答案
使用下面的代码,已经可以快速解析文本文件。然而,我希望进一步提高它的速度。有人有什么可以进一步优化的建议吗
void ConfigReader_ScanInt16x4 (const char *token, const char *format, int16_t *res1, int16_t *res2, int16_t *res3, int16_t *res4)
{
int stop = 0;
char* resstr;
for(int i = 0; i < 100; i++)
{
if (token[i] != format[i])
{
stop = 1;
break;
}
if(token[i] == '=')
{
resstr = strchr( token, '=' );
break;
}
}
if(stop == 0)
{
*res1 = (int16_t)strtol( ++resstr, &resstr, 10 );
*res2 = (int16_t)strtol( ++resstr, &resstr, 10 );
*res3 = (int16_t)strtol( ++resstr, &resstr, 10 );
*res4 = (int16_t)strtol( ++resstr, &resstr, 10 );
stop2 = 1;
}
}
你知道,这是你应用程序的瓶颈吗?@JCWasmx86:是的,我已经测试过了。你有什么样的基准测试,这样我们就可以用相同的输入来比较性能了吗?@JCWasmx86:我正在嵌入式系统上运行代码。每行调用ConfigReader_ScanInt16x4大约100次需要150µs。此外也就是说,读取该行需要100µs。尝试用
resstr=&token[i];
替换resstr=strchr(token,'=');
?
ConfigReader_ScanInt16x4(token, "parameter=%d,%d,%d,%d", (int16_t*) ¶meter[0], (int16_t*) ¶meter[1], (int16_t*) ¶meter[2], (int16_t*) ¶meter[3]);
ConfigReader_ScanInt16x4(token, "another_parameter=%d,%d,%d,%d", (int16_t*) &another_parameter[0], (int16_t*) &another_parameter[1], (int16_t*) &another_parameter[2], (int16_t*) &another_parameter[3]);