gpt4 book ai didi

C++ 循环不断评估 if 语句,使其速度太慢

转载 作者:行者123 更新时间:2023-11-27 22:44:40 26 4
gpt4 key购买 nike

我目前有一个 C++ 程序,它应该生成每个可能的域名,最多为一组数字。我拥有的代码目前非常冗长(这很好),但一旦开始生成超过 4 位数字,它也会非常缓慢。真正开始出错的循环如下所示:

const char* chars[] = {"a","b","c","d","e","f","g","h","i","j","k",
"l","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "0", "1",
"2", "3", "4", "5", "6", "7", "8", "9", "-"};
int char_num = 1;

[...]

if(char_num == 5) {
for(int i = 0; i < 36; i++) {
for(int j = 0; j < 37; j++) {
for(int k = 0; k < 37; k++) {
for(int l = 0; l < 37; l++) {
for(int m = 0; m < 36; m++) {
cout << "adding " << chars[i] << chars[j] << chars[k] << chars[l] << chars[m] << ".com to list\n";
if(i == 35 && j == 36 && k == 36 && l == 36 && m == 35) {
char_num++;
cout << "Generating to " << char_num + 1 << " characters\n";
}
}
}
}
}
}
}

我打算在此之后至少增加三到四个 if 语句,每个语句中的 for 循环会逐渐增多。我还需要将输出写入一个文件,并使用该文件进行 DNS 查找,因此我需要尽可能提高性能,这样我就不会等待数周才能完成程序。

目前我主要担心的是程序正在评估每次交互的 if 语句,我认为这对性能有重大影响,给定嵌套循环的数量。为了阻止这种情况,我尝试将 if 语句移动到一个单独的函数中,并让它在完成后返回一个值,但我注意到当我这样做时我无法从函数内部登录到控制台,这使得事情变得更复杂。

在 C++ 中执行此操作的正确过程是什么?还有其他方法可以加快代码速度吗?我之前确实尝试过在 node.js 中编写代码,但是当我开始写入文件时它变得疯狂并抛出了一堆内存不足的错误,而且我认为 C++ 可能会更快,因此我切换了语言。

最佳答案

您的 if 语句似乎在检查循环的结束。有一个简单的解决方案可以避免这种情况:删除 if 并将代码放在 循环之后!

但是,如果您需要添加更多依赖于循环变量的 if,我真的不知道如何优化它。但是,不要将它们放在一个函数中:调用函数的开销会减慢您的代码(并且优化编译器无论如何都会内联您的函数)。

您可以探索以下几种可能性:

  • 使用多线程/多处理。如果做得好,这最多可以将执行时间除以计算机上的 CPU 内核数
  • 启用编译器优化(-O3-Ofast with g++)

最后一件事:如果消费者程序接受来自标准输入的数据,将程序的输出通过管道传输到它的速度将是使用它们生成名称​​then 的两倍。 EG 而不是

producer > storage.txt
consumer < storage.txt

producer | consumer

关于C++ 循环不断评估 if 语句,使其速度太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44568251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com