Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++执行时间比Python慢 我切换到C++,因为我听到它比Python快400倍,但是当我做了一个无限循环,增加一个变量并打印它的值时,Python看起来就快了,怎么可能呢? 如何优化它_Python_C++ - Fatal编程技术网

C++执行时间比Python慢 我切换到C++,因为我听到它比Python快400倍,但是当我做了一个无限循环,增加一个变量并打印它的值时,Python看起来就快了,怎么可能呢? 如何优化它

C++执行时间比Python慢 我切换到C++,因为我听到它比Python快400倍,但是当我做了一个无限循环,增加一个变量并打印它的值时,Python看起来就快了,怎么可能呢? 如何优化它,python,c++,Python,C++,Python脚本: x = 1 while 1: print(x) x+=1 C++代码: int x = 1; while (1) { cout << x << endl; x++; } 速度几乎与python相同,但没有更快 是的,我搜索了这个主题,但没有找到任何解释原因的东西。你不是在测试语言,而是在测试操作系统 窗口系统显示文本所需的时间比代码按数量级准备字符所需的时间长 任何语言都会获得相同的行为。您不是在对语言进行基准测试,而是在对操作系统

Python脚本:

x = 1
while 1:
    print(x)
    x+=1
C++代码:

int x = 1;
while (1) {
cout << x << endl;
x++;
}
速度几乎与python相同,但没有更快


是的,我搜索了这个主题,但没有找到任何解释原因的东西。

你不是在测试语言,而是在测试操作系统

窗口系统显示文本所需的时间比代码按数量级准备字符所需的时间长


任何语言都会获得相同的行为。

您不是在对语言进行基准测试,而是在对操作系统进行基准测试

窗口系统显示文本所需的时间比代码按数量级准备字符所需的时间长


与Python相比,C++的优势不在于受操作系统限制的操作,例如打印到控制台,而是:

事实上,它是硬类型的,因此由于动态类型和类型安全性,运行时开销最小化 编译C++的事实是高度优化的,Python主要是解释的。 在它的内存管理模型中,Python使用需要垃圾收集的托管对象 当使用汇编和利用特定硬件时,C++在实现性能关键代码时可以给予更多的控制。
与Python相比,C++的优势不在于受操作系统限制的操作,例如打印到控制台,而是:

事实上,它是硬类型的,因此由于动态类型和类型安全性,运行时开销最小化 编译C++的事实是高度优化的,Python主要是解释的。 在它的内存管理模型中,Python使用需要垃圾收集的托管对象 当使用汇编和利用特定硬件时,C++在实现性能关键代码时可以给予更多的控制。

C++的std::endl刷新流,python的print不刷新流。尝试使用\n,这应该加快C++代码。

C++的STD::Endl刷新流,Python的打印不。尝试使用\n,这应该加快C++代码。

除了在每次迭代中清除EUT的缓冲区。我的硬件也是如此。@ BRUBYEB79:无意义,都在同一硬件上运行。你明白我的答案了吗?@BlueBoy79我个人怀疑核心问题是,正如我已经提到的,由于std::endl,你在每次迭代中都会刷新std::cout的缓冲区。请尝试改用“\n”。@AlgirdasPreid:我假设Python打印也会执行刷新。除了在每次迭代时endl刷新cout的缓冲区之外。这是我的硬件吗?@BlueBoy79:胡说八道,两者都在同一硬件上运行。你明白我的答案了吗?@BlueBoy79我个人怀疑核心问题是,正如我已经提到的,由于std::endl,你在每次迭代中都会刷新std::cout的缓冲区。尝试改用“\n”。@AlgirdasPreid:我假设Python打印也执行刷新。@Ron:不,解释很简单。友好的提示endl实际上总是错误的。@MatteoItalia所以我不应该使用endl,然后使用什么来打印新行?@BlueBoy79\n-但关键的一点是,您根本不应该在基准测试循环中写入终端。\n。endl强制进行缓冲区刷新,这在打印到控制台时是无用的,因为在这种情况下,IO仍然是行缓冲的,并且在重定向到文件时会降低性能。@Ron:no,解释很简单。友好的提示endl实际上总是错误的。@MatteoItalia所以我不应该使用endl,然后使用什么来打印新行?@BlueBoy79\n-但关键的一点是,您根本不应该在基准测试循环中写入终端。\n。Entl强制缓冲区刷新,这是没有用的,当打印到控制台时,在这种情况下,IO是行缓冲的,并且当重定向到文件时会杀死性能。C++被编译,Python被解释。这是关键的一点,或者除了执行C++中的算术运算通常比在cpython中执行一个或两个数量级的速度,执行算术运算。@ yVistaouST,所以你认为编译的python和C++一样快吗?@丹尼尔特鲁曼:没有正式的Python编译器,我怀疑可用的可以打败可用的C++优化器。您需要比较类似的东西,因为Python中的数据结构更加灵活、多态和运行时检查。对于原始计算,是的,Python可以是快速的。C++的解释实现和Python的编译实现。比较常见的实现,例如UNIX分发的一部分,就是你所说的方式。C++是编译的,Python是解释的。这是关键。或执行算术运算,除了
C++中的算术运算通常比CPython快一到两个数量级。@ yVistaouST,所以你认为编译的python和C++一样快吗?@丹尼尔特鲁曼:没有正式的Python编译器,我怀疑可用的Python可以打败可用的C++优化器。您需要比较类似的东西,因为Python中的数据结构更加灵活、多态和运行时检查。对于原始计算,是的,Python可以是快速的。C++的解释实现和Python的编译实现。相对常见的实现(例如Unix发行版的一部分)就是您所说的。所有这三种情况都是endl、\n和print刷新缓冲区,如果您写入控制台,就像OP所做的那样。@MatteoItalia,这不是标准所规定的,而是实现定义的,而std::endl来自我最近的测试\n不会刷新Linux上的stdout。此外,在带锁的多线程应用程序中使用\n时,输出仍然显示在奇怪的缓冲区中。如果您正在写入控制台,所有这三种情况都会像OP一样结束\n和打印刷新缓冲区。@MatteoItalia,这不是标准指定的,而是实现定义的,而std::endl来自我最近的测试\n不会刷新Linux上的stdout。此外,在带锁的多线程应用程序中使用\n时,输出仍然显示在奇怪的缓冲区中。
ios_base::sync_with_stdio(false);