我在优化 C++ 程序以获得尽可能快的运行时时遇到问题。
代码的要求是输出 2 个长整数之差的绝对值,通过文件馈送到程序中。即:
./myprogram < unkownfilenamefullofdata
文件名未知,每行有 2 个数字,以空格分隔。测试数据量未知。我创建了 2 个测试数据文件。其中一种情况属于极端情况,长度为 5 次。至于另一个,我使用 Java 程序生成 2,000,000 个随机数,并将其输出到 timedrun 文件 - 相当于 18.MB 的测试。
大文件运行时间为 3.4 秒。我需要将其分解为 1.1 秒。
这是我的代码:
int main() {
long int a, b;
while (scanf("%li %li",&a,&b)>-1){
if(b>=a)
printf("%li/n",(b-a));
else
printf("%li/n",(a-b));
} //endwhile
return 0;
}//end main
我在我的程序上运行了 Valgrind,它表明读写部分存在很多阻碍。如果我知道我只会收到一个数字,我将如何将打印/扫描重写为最原始的 C++ 形式?有没有一种方法可以将数字扫描为二进制数,并通过逻辑运算操作数据来计算差异?我还被告知要考虑编写一个缓冲区,但在搜索了大约 6 个小时的网络并尝试编写代码后,我没有成功。
任何帮助将不胜感激。
最佳答案
您需要做的是将整个字符串加载到内存中,然后从那里提取数字,而不是重复进行 I/O 调用。然而,您可能会发现,从硬盘驱动器加载 18MB 需要花费大量时间。
关于c++ - 在 C++ 中优化 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9241332/