是什么原因导致c / perl / python中简单程序之间的执行时间长?

问题描述 投票:0回答:1

我用C,Perl和Python编写了一个简单的程序,该程序将变量递增到10亿。我没想到不同语言之间不会有太大的区别,但是很惊讶地看到巨大的区别。这些程序仅计10亿个:

在c:

int main() {
  int c = 0;

  while (c < 1000000000) {
    c++;
  }
}

在Perl中:

#! /usr/bin/env perl

use strict;
use warnings;

my $x = 0;

while ($x < 1000000000) {
  $x++;
}

在Python中:

#!/usr/bin/env python

i = 0
while i < 1000000000:
  i += 1

使用zsh / bash时间函数的运行时间为:

对于c:1.78s用户0.01s系统98%cpu 1.813总计

对于perl:29.86s用户0.13s系统99%cpu 30.205总计

对于Python:71.96s用户0.32s系统98%cpu比例1:13.16

我很难相信c比perl快15倍,比Python快35倍。对于这样一个简单的程序,这似乎很疯狂吗?为什么差异很大?

python c perl execution
1个回答
0
投票

由于perl变量是无类型的(并且实际上可以在执行过程中更改其有效类型),因此对它们的每个操作(例如

而且,perl并不将算术运算的结果限制为int。相反,它会动态更新变量的类型,例如从有符号的int到无符号的int到两倍,以最好地保留结果的值和准确性。

这意味着perl必须为一个简单的补充:与C相比,编译器知道两个arg都是有符号整数,并且不关心结果是否溢出;并且可以将加法映射到单个CPU加法指令

© www.soinside.com 2019 - 2024. All rights reserved.