理性分析 C++(-O2) 和 JS 的性能差距
laptop: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz..
Test1:
最后一行:时间(ms)
#pragma GCC optimize("O2")
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[]) {
int t = clock();
int a = 1000000000,b = 1;
while(a) {
b <<= 1;
a--;
}
printf("%d ms\n",clock() - t);
return 0;
}
// 0 ms
var t;
t = new Date;
var a = 1000000000,
b = 1;
while(a) {
b <<= 1;
a--;
}
console.log(new Date - t + "ms");
// 915ms
Test2:
#pragma GCC optimize("O2")
#include <bits/stdc++.h>
using namespace std;
int a[10000100];
void quick_sort(int a[], int l, int r) {
if (l < r) {
int i = l, j = r, x = a[l];
while (i < j) {
while(i < j && a[j] >= x) j--;
if(i < j) a[i++] = a[j];
while(i < j && a[i] < x) i++;
if(i < j) a[j--] = a[i];
}
a[i] = x;
quick_sort(a, l, i - 1);
quick_sort(a, i + 1, r);
}
}
int main(int argc, char const *argv[]) {
srand((int)time(0));
for(int i = 0;i < 10000000; i++) {
a[i] = rand();
}
int t = clock();
quick_sort(a,0,10000000);
printf("%d ms\n",clock() -t);
return 0;
}
// 1738 ms
function quick_sort(a,l,r) {
if (l < r) {
var i = l, j = r, x = a[l];
while (i < j) {
while(i < j && a[j] >= x) j--;
if(i < j) a[i++] = a[j];
while(i < j && a[i] < x) i++;
if(i < j) a[j--] = a[i];
}
a[i] = x;
quick_sort(a, l, i - 1);
quick_sort(a, i + 1, r);
}
}
var s,i,t;
for(i=0,s=[];i<10000000;i++) s.push(Math.random()*1E7|0);
t = new Date;
quick_sort(s,0,10000000);
console.log(new Date - t + " ms");
// 3080 ms
Test3:
#pragma GCC optimize("O2")
#include <bits/stdc++.h>
using namespace std;
const int maxn = 50000000;
int a[maxn];
int p[maxn],m[maxn];
int pc;
int main(int argc, char const *argv[]) {
int t = clock();
for(int i = 2; i < maxn; i++) {
if(m[i] == 0) {
p[++pc] = m[i] = i;
}
int k = 0;
for(int j = 1; j <= pc && p[j] <= m[i] && (k = p[j] * i) < maxn; j++) {
m[k] = p[j];
}
}
int ans = 0;
for(int i = 1; i <= pc; i++) {
ans ^= p[i];
}
printf("%d\n", ans);
printf("%d ms\n",clock() - t);
return 0;
}
// 338 ms
var pc = 0;
var m = [];
var p = [];
function solve() {
// console.log("ok");
var i;
for(i = 2 ;i < 50000000;i++) {
if(m[i] == null) {
// console.log(i);
p[++pc] = m[i] = i;
}
var k = 0;
var j ;
for(j = 1; j <= pc && p[j] <= m[i] && (k = p[j] * i) < 50000000; j++) {
m[k] = p[j];
}
}
// console.log("pc = " + pc);
var ans = 0;
for(var i = 1; i <= pc; i++) {
ans ^= p[i];
}
console.log("ans= " + ans);
}
t = new Date;
solve();
console.log(new Date - t + " ms");
// 8096 ms
Test4:
#pragma GCC optimize("O2")
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000;
int G[1000][1000];
int sed = 0;
inline int getRand()
{
return sed = (sed * sed * 73 + sed * 233 + 19260817) & 0x0000ffff;
}
int main(int argc, char const *argv[]) {
int t = clock();
for(int i = 0; i < maxn; i++) {
for(int j = 0; j < maxn; j++) {
G[i][j] = getRand();
}
}
for(int i = 0; i < maxn; i++) {
for(int j = 0; j < maxn; j++) {
for(int k = 0; k < maxn; k++) {
if(G[j][k] > G[j][i] + G[i][k]) {
G[j][k] = G[j][i] + G[i][k];
}
}
}
}
int ans = 0;
for(int i = 0; i < maxn; i++) {
for(int j = 0; j < maxn; j++) {
ans ^= G[i][j];
}
}
printf("%d\n", ans);
printf("%d ms\n",clock() - t);
return 0;
}
// 1718 ms
var sed = 0;
var G = new Array();
function getRand() {
var res = sed = (sed * sed * 73 + sed * 233 + 19260817) & 0x0000ffff;
// console.log("res = " + res);
return res;
}
function solve() {
// console.log("ok");
for(var i = 0; i < 1000; i++) {
G[i] = new Array();
for(var j = 0; j < 1000; j++) {
G[i][j] = getRand();
}
}
for(var i = 0; i < 1000; i++) {
for(var j = 0; j < 1000; j++) {
for(var k = 0; k < 1000; k++) {
if(G[j][k] > G[j][i] + G[i][k]) {
G[j][k] = G[j][i] + G[i][k];
}
}
}
}
var ans = 0;
for(var i = 0; i < 1000; i++) {
for(var j = 0; j < 1000; j++) {
ans ^= G[i][j];
}
}
console.log("ans= " + ans);
}
t = new Date;
solve();
console.log(new Date - t + " ms");
// 3440 ms
Test5:
#pragma GCC optimize("O2")
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000000000; // 1e9
typedef unsigned long long ull;
int P = 1000000007;
int main(int argc, char const *argv[]) {
int t = clock();
ull ans = 1;
for(int i = 1; i < maxn; i++) {
ans = ans * i % P;
}
printf("%llu\n",ans);
printf("%d ms\n",clock() - t);
return 0;
}
// 11953 ms
var P = 1000000007;
var maxn = 1000000000;// 1e9
function solve() {
// console.log("ok");
var ans = 1;
for(var i = 1; i < maxn; i++) {
ans = ans * i % P;
}
console.log("ans= " + ans);
}
t = new Date;
solve();
console.log(new Date - t + " ms");
// 32175 ms
理性分析 C++(-O2) 和 JS 的性能差距的更多相关文章
- 准备:新V8即将到来,Node.js的性能正在改变
V8的Turbofan的性能特点将如何对我们优化的方式产生影响 审阅:来自V8团队的Franziska Hinkelmann和Benedikt Meurer. **更新:Node.js 8.3.0已经 ...
- Babylon.js官方性能优化文档中文翻译
在这里列出Babylon.js官方性能优化文档的中英文对照,并在CardSimulate项目里对其中的一些优化方法进行实践. How To 如何 Optimize your scene 优化你的场景 ...
- 多个JS文件性能优化
页面中引入的JS文件是阻塞式加载的,这样会影响页面性能.以下是JS文件性能优化方法: 一:将所有的<script>标签放到页面底部,也就是</body>闭合标签之前,这能确保在 ...
- js开发性能(一)
随着js技术的发展,性能问题开始被越来越多的人关注,最近了解了一些关于前端性能的问题,这里主要讨论一下在js脚本加载和执行的过程中,我们应该怎么样来提高js的性能. js脚本的处理 初学前端的时候,我 ...
- 纵论WebAssembly,JS在性能逆境下召唤强援
webassembly的作用 webassembly是一种底层的二进制数据格式和一套可以操作这种数据的JS接口的统称.我们可以认为webassembly的范畴里包含两部分 wasm: 一种体积小.加载 ...
- php 5.6,7.0静态方法调用和new调用方法性能差距
windows7 64 机器I5 8G内存,128G SSD 吐槽一下,win10内存的消耗,真的可怕 测试代码 class staticTest { public function test() { ...
- js 动画性能分析 transfrom
1.动画实现代码 (1)使用定位实现: <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...
- 页面装载js及性能分析方法
一.装载 先装载静态页面的引用js文件,然后查找引用文件中是否包含onload函数,比如main.js中包含onload函数,在main.js中查找是否有对其他js文件的引用,优先装载引用js文件,被 ...
- [Ext JS 4]性能优化
一般的优化技巧 1. 检查你定义的时间监听器 正确的设置事件监听器对性能会有很大的影响. 举例来说, 在定义一个store的时候,设置一个load 的事件去触发从后台读取数据,如果设置single 的 ...
随机推荐
- error:assign attribute must be unsafeunretained
今天在使用协议的过程中.偶然发现这样使用 ? 1 2 3 4 5 6 7 8 9 10 @interface AppDelegate (){ id<chatdelegate> t ...
- EventBus框架原理解析(结合源代码)(上)
上一篇文章http://blog.csdn.net/crazy__chen/article/details/47425779 和大家一起模仿EventBus的实现机制.和大家一起写出了一个简易的Eve ...
- 自己主动化脚本ssh以及telnet发送命令并退出(windows和linux都适用)
须要安装putty,用到的命令是plink: PuTTY Link: command-line connection utility Unidentified build, Jun 23 2015 1 ...
- 转:Mac下搭建svn服务器和XCode配置svn
Mac下搭建svn服务器和XCode配置svn 先打开命令行终端. 1.创建svn repository svnadmin create /yourpath/svnroot/repository 2. ...
- nodeJs学习路线
转载自:http://blog.fens.me/nodejs-roadmap/ 前言 用Nodejs已经1年有余,陆陆续续写了48篇关于Nodejs的博客文章,用过的包有上百个. 和全部人一样,我也从 ...
- Android中ViewPager的使用
我们在一个apk中第一次開始的时候,会有一个guide界面.一般使用ViewPager来完毕. 布局文件例如以下: <? xml version="1.0" encoding ...
- Exception: Operation xx of contract xx specifies multiple request body parameters to be serialized without any wrapper elements.
Operation 'CreateProductCodeStock' of contract 'IChileService' specifies multiple request body param ...
- legend---一、如何实现js跳转到php页面
legend---一.如何实现js跳转到php页面 一.总结 一句话总结:url还是同样的方式,只不过注意引号内嵌的时候的转义. 代码: onClick="javascript:if(con ...
- Jmeter +InfluxDB +collectd +Grafana16
Jmeter +InfluxDB +collectd +Grafana(十六) 虚拟机ip 192.168.180.128 Influxdb Influxdb是一个开源的分布式时序.时间和指标数据库, ...
- PasswordHelper 对user对象的password进行加密重设
public class PasswordHelper { private RandomNumberGenerator randomNumberGenerator = new SecureRandom ...