forked from mbebenita/LLJS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlinked-list.ljs
91 lines (74 loc) · 1.47 KB
/
linked-list.ljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
extern memory;
struct Node {
Node *next;
int val;
double pad1, pad2, pad3, pad4;
};
function ObjNode() {
this.next = null;
this.val = 0;
this.pad1 = this.pad2 = this.pad3 = this.pad4 = 0;
}
extern Date;
const int n = 25000;
function benchStruct() {
let start = new Date();
let Node *head;
for (let int i = 0; i < n; ++i) {
let Node *prev = head;
head = new Node;
head->next = prev;
head->val = i;
}
let double sum = 0;
for (let int i = 0; i < n; ++i) {
let Node *prev = head;
sum += head->val;
head = head->next;
delete prev;
}
return new Date() - start;
}
function benchObject() {
let start = new Date();
let head;
for (let i = 0; i < n; ++i) {
let prev = head;
head = new ObjNode();
head.next = prev;
head.val = i;
}
let sum = 0;
for (let i = 0; i < n; ++i) {
sum += head.val;
head = head.next;
}
return new Date() - start;
}
extern print;
if (typeof print === "undefined") {
extern console;
print = console.log;
}
// Warm up the JIT.
benchStruct(); benchStruct();
benchObject(); benchObject();
let dt;
dt = 0;
for (let i = 0; i < 25; ++i) {
dt += benchStruct();
}
print("struct with 32 bytes of padding " + dt / 25);
dt = 0;
for (let i = 0; i < 25; ++i) {
dt += benchObject();
}
print("object with 4 extra properties " + dt / 25);
let uint *x;
*x
let uint *leak = new uint;
// let m = memory
// if (m.memcheck.enabled){
// print("\n")
// print(m.memcheck.report())
// }