首页 > 开发 > C++ > 正文

为什么js和c++代码差不多,内存和空间差别却差很多?

2017-09-11 21:19:12  来源: 网友分享

下面的两段代码:

//Javascriptvar num = readline();var s = readline().split(' ');var b = [];if(num % 2 === 0){    for(var i = s.length- 1,k=0;i>0;i -= 2,k++){        b[k]=s[i];    }    for(var i = 0,k = b.length;i< s.length-1;i +=2,k++){        b[k]=s[i];    }}else{    for(var i = s.length-1,k=0;i>-1;i -= 2,k++){        b[k]=s[i];    }    for(var i = 1,k = b.length;i< s.length;i +=2,k++){        b[k]=s[i];    }}var b = b.join(' ');print(b);
//C++#include <iostream>#include <vector>#include <algorithm>using namespace std;xa0int main(){xa0xa0xa0xa0long long n;xa0xa0xa0xa0while(cin>>n)xa0xa0xa0xa0{xa0xa0xa0xa0xa0xa0xa0xa0if(n == 1)xa0xa0xa0xa0xa0xa0xa0xa0{xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0cout<<"1"<<endl;xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0return 0;xa0xa0xa0xa0xa0xa0xa0xa0}xa0xa0xa0xa0xa0xa0xa0xa0vector<int> a(n);xa0xa0xa0xa0xa0xa0xa0xa0for(long long i=0;i<n;++i)xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0cin>>a[i];xa0xa0xa0xa0xa0xa0xa0xa0xa0if(n%2==0)xa0xa0xa0xa0xa0xa0xa0xa0{xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0for(long long i=n-1;i>=0;i-=2)xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0{xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0cout<<a[i]<<" ";xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0}xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0cout<<a[0];xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0for(long long i=2;i<n-1;i+=2)xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0cout<<" "<<a[i];xa0xa0xa0xa0xa0xa0xa0xa0}xa0xa0xa0xa0xa0xa0xa0xa0elsexa0xa0xa0xa0xa0xa0xa0xa0{xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0for(long long i=n-1;i>=0;i-=2)xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0{xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0cout<<a[i]<<" ";xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0}xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0cout<<a[1];xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0for(long long i=3;i<n-1;i+=2)xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0xa0cout<<" "<<a[i];xa0xa0xa0xa0xa0xa0xa0xa0}xa0xa0xa0xa0xa0xa0xa0xa0cout<<endl;xa0xa0xa0xa0}xa0xa0xa0xa0return 0;}

两个代码的时间复杂度都差不多吧,但是再测大数的时候,差异却特别大,js耗时700多毫秒,内存占用20000K以上,而c++只要100多毫秒,内存占用更是只有3000K多一点。这是为什么啊?这俩语言性能差这么多的吗?

解决方案

js从类型上来说是弱类型语言(没有强制规定类型),C++是强类型语言(必须申明数据类型);
从语言的编译特性上来说,js是不需要编译进行发布的,而是在执行的时候实时进行解释执行的,而C++可以说是直接编译成机器语言,让机器直接运行的。

也就是从第二点来看,一个程序是依赖另外一套解释程序来进行边翻译边执行,另外一套直接执行,就能看出性能差别了。