Skip to content

Commit 1415b74

Browse files
committed
walloc 0.0.2
1 parent 97f68cd commit 1415b74

8 files changed

+152
-7
lines changed

benchmark.py

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import subprocess
2+
import statistics
3+
import matplotlib.pyplot as plt
4+
5+
runs = 25
6+
runs_array = [num + 1 for num in range(runs)]
7+
malloc = []
8+
walloc = []
9+
for x in range(runs):
10+
malloc.append(int(subprocess.check_output(['./build/malloc_benchmark']).decode()))
11+
walloc.append(int(subprocess.check_output(['./build/walloc_benchmark']).decode()))
12+
13+
plt.plot(runs_array, malloc, label="ptalloc benchmark")
14+
plt.plot(runs_array, walloc, label="warpalloc benchmark")
15+
plt.legend()
16+
plt.title("ptalloc vs warpalloc time to run the same benchmark")
17+
plt.xlabel("Trials")
18+
plt.ylabel("Time")
19+
plt.xticks(runs_array)
20+
plt.show()
Binary file not shown.

build/walloc.o

16 Bytes
Binary file not shown.

build/walloc_benchmark

18.5 KB
Binary file not shown.

tests/malloc_benchmark.c

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#include <time.h>
2+
#include <stdlib.h>
3+
#include <stdio.h>
4+
#include "../walloc.h"
5+
6+
int main() {
7+
int startTime = clock();
8+
char *myMemory = malloc(20); // takes significantly less time since memory does not need to be requested from the OS.
9+
free(myMemory); // frees the memory, and saves it for later allocations
10+
char *myMemory2 = malloc(10);
11+
free(myMemory2);
12+
char *myMemory3 = malloc(90); // takes significantly less time since memory does not need to be requested from the OS.
13+
char *myMemory4 = malloc(70);
14+
free(myMemory3);
15+
char *myMemory5 = malloc(20);
16+
free(myMemory4);
17+
char *myMemory6 = malloc(40);
18+
char *myMemory7 = malloc(20);
19+
free(myMemory5);
20+
free(myMemory7);
21+
char *myMemory8 = malloc(40);
22+
char *myMemory9 = malloc(20);
23+
free(myMemory9);
24+
free(myMemory8);
25+
free(myMemory6);
26+
char *myMemory10 = malloc(40);
27+
char *myMemory11 = malloc(20);
28+
free(myMemory10);
29+
free(myMemory11);
30+
char *myMemory12 = malloc(40);
31+
char *myMemory13 = malloc(20);
32+
free(myMemory13);
33+
free(myMemory12);
34+
35+
char *myMemoryz = malloc(20); // takes significantly less time since memory does not need to be requested from the OS.
36+
free(myMemoryz); // frees the memory, and saves it for later allocations
37+
char *myMemoryz2 = malloc(10);
38+
free(myMemoryz2);
39+
char *myMemoryz3 = malloc(90); // takes significantly less time since memory does not need to be requested from the OS.
40+
char *myMemoryz4 = malloc(70);
41+
free(myMemoryz3);
42+
char *myMemoryz5 = malloc(20);
43+
free(myMemoryz4);
44+
char *myMemoryz6 = malloc(40);
45+
char *myMemoryz7 = malloc(20);
46+
free(myMemoryz5);
47+
free(myMemoryz7);
48+
char *myMemoryz8 = malloc(40);
49+
char *myMemoryz9 = malloc(20);
50+
free(myMemoryz9);
51+
free(myMemoryz8);
52+
free(myMemoryz6);
53+
char *myMemoryz10 = malloc(40);
54+
char *myMemoryz11 = malloc(20);
55+
free(myMemoryz10);
56+
free(myMemoryz11);
57+
char *myMemoryz12 = malloc(40);
58+
char *myMemoryz13 = malloc(20);
59+
free(myMemoryz13);
60+
free(myMemoryz12);
61+
62+
int endTime = clock();
63+
64+
printf("%d", endTime - startTime);
65+
}

tests/preallocating.c

-7
This file was deleted.

tests/walloc_benchmark.c

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#include <time.h>
2+
#include <stdio.h>
3+
#include <stdlib.h>
4+
#include "../walloc.h"
5+
6+
int main() {
7+
prewalloc(800); // preallocate 255 bytes. will make subsequent allocations faster. Done at the start of the program.
8+
int startTime = clock();
9+
10+
char *myMemory = walloc(20); // takes significantly less time since memory does not need to be requested from the OS.
11+
wfree(myMemory); // frees the memory, and saves it for later allocations
12+
char *myMemory2 = walloc(10);
13+
wfree(myMemory2);
14+
char *myMemory3 = walloc(90); // takes significantly less time since memory does not need to be requested from the OS.
15+
char *myMemory4 = walloc(70);
16+
wfree(myMemory3);
17+
char *myMemory5 = walloc(20);
18+
wfree(myMemory4);
19+
char *myMemory6 = walloc(40);
20+
char *myMemory7 = walloc(20);
21+
wfree(myMemory5);
22+
wfree(myMemory7);
23+
char *myMemory8 = walloc(40);
24+
char *myMemory9 = walloc(20);
25+
wfree(myMemory9);
26+
wfree(myMemory8);
27+
wfree(myMemory6);
28+
char *myMemory10 = walloc(40);
29+
char *myMemory11 = walloc(20);
30+
wfree(myMemory10);
31+
wfree(myMemory11);
32+
char *myMemory12 = walloc(40);
33+
char *myMemory13 = walloc(20);
34+
wfree(myMemory13);
35+
wfree(myMemory12);
36+
37+
char *myMemoryz = walloc(20); // takes significantly less time since memory does not need to be requested from the OS.
38+
wfree(myMemoryz); // frees the memory, and saves it for later allocations
39+
char *myMemoryz2 = walloc(10);
40+
wfree(myMemoryz2);
41+
char *myMemoryz3 = walloc(90); // takes significantly less time since memory does not need to be requested from the OS.
42+
char *myMemoryz4 = walloc(70);
43+
wfree(myMemoryz3);
44+
char *myMemoryz5 = walloc(20);
45+
wfree(myMemoryz4);
46+
char *myMemoryz6 = walloc(40);
47+
char *myMemoryz7 = walloc(20);
48+
wfree(myMemoryz5);
49+
wfree(myMemoryz7);
50+
char *myMemoryz8 = walloc(40);
51+
char *myMemoryz9 = walloc(20);
52+
wfree(myMemoryz9);
53+
wfree(myMemoryz8);
54+
wfree(myMemoryz6);
55+
char *myMemoryz10 = walloc(40);
56+
char *myMemoryz11 = walloc(20);
57+
wfree(myMemoryz10);
58+
wfree(myMemoryz11);
59+
char *myMemoryz12 = walloc(40);
60+
char *myMemoryz13 = walloc(20);
61+
wfree(myMemoryz13);
62+
wfree(myMemoryz12);
63+
64+
int endTime = clock();
65+
printf("%d", endTime - startTime);
66+
}

walloc.asm

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ section .text
4949

5050
;--check_free_chunks--
5151
mov eax, [fbin]
52+
mov ebx, fbin + 4
5253
.size_check_loop:
5354
test eax, eax
5455
je .check_wilderness ; if end of free chunks, then use space of wilderness

0 commit comments

Comments
 (0)