Skip to content

Instantly share code, notes, and snippets.

@MasterDuke17
Last active April 26, 2020 18:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MasterDuke17/0cde60931db68b66fc3cf889c817ef53 to your computer and use it in GitHub Desktop.
Save MasterDuke17/0cde60931db68b66fc3cf889c817ef53 to your computer and use it in GitHub Desktop.
1 adding a page of size 14336 for bin = 12
1 adding a page of size 20480 for bin = 18
1 adding a page of size 21504 for bin = 19
1 adding a page of size 28672 for bin = 26
1 adding a page of size 31744 for bin = 29
1 adding a page of size 34816 for bin = 32
2 adding a page of size 18432 for bin = 16
4 adding a page of size 19456 for bin = 17
4 adding a page of size 23552 for bin = 21
4 adding a page of size 50176 for bin = 47
5 adding a page of size 16384 for bin = 14
5 adding a page of size 47104 for bin = 44
6 adding a page of size 22528 for bin = 20
6 adding a page of size 25600 for bin = 23
15 adding a page of size 13312 for bin = 11
27 adding a page of size 5120 for bin = 3
27 adding a page of size 6144 for bin = 4
58 adding a page of size 12288 for bin = 10
65 adding a page of size 66560 for bin = 63
102 adding a page of size 3072 for bin = 1
112 adding a page of size 10240 for bin = 8
128 adding a page of size 2048 for bin = 0
133 adding a page of size 11264 for bin = 9
149 adding a page of size 33792 for bin = 31
833 adding a page of size 4096 for bin = 2
6591 adding a page of size 9216 for bin = 7
9706 adding a page of size 8192 for bin = 6
10136 adding a page of size 17408 for bin = 15
29739 adding a page of size 7168 for bin = 5
1 adding a page of size 14336 for bin = 12
1 adding a page of size 20480 for bin = 18
1 adding a page of size 21504 for bin = 19
1 adding a page of size 28672 for bin = 26
1 adding a page of size 31744 for bin = 29
1 adding a page of size 34816 for bin = 32
2 adding a page of size 18432 for bin = 16
4 adding a page of size 19456 for bin = 17
4 adding a page of size 23552 for bin = 21
4 adding a page of size 50176 for bin = 47
5 adding a page of size 16384 for bin = 14
5 adding a page of size 47104 for bin = 44
6 adding a page of size 20480 for bin = 3
6 adding a page of size 22528 for bin = 20
6 adding a page of size 24576 for bin = 4
6 adding a page of size 25600 for bin = 23
15 adding a page of size 13312 for bin = 11
25 adding a page of size 12288 for bin = 1
28 adding a page of size 40960 for bin = 8
31 adding a page of size 8192 for bin = 0
52 adding a page of size 65536 for bin = 2
58 adding a page of size 12288 for bin = 10
65 adding a page of size 66560 for bin = 63
133 adding a page of size 11264 for bin = 9
149 adding a page of size 33792 for bin = 31
1267 adding a page of size 139264 for bin = 15
1646 adding a page of size 36864 for bin = 7
1858 adding a page of size 114688 for bin = 5
2426 adding a page of size 32768 for bin = 6
1 adding a page of size 14336 for bin = 12
1 adding a page of size 20480 for bin = 18
1 adding a page of size 21504 for bin = 19
1 adding a page of size 22528 for bin = 20
1 adding a page of size 28672 for bin = 26
1 adding a page of size 33792 for bin = 31
1 adding a page of size 34816 for bin = 32
1 adding a page of size 47104 for bin = 44
2 adding a page of size 16384 for bin = 14
2 adding a page of size 18432 for bin = 16
2 adding a page of size 19456 for bin = 17
4 adding a page of size 23552 for bin = 21
4 adding a page of size 25600 for bin = 23
4 adding a page of size 50176 for bin = 47
8 adding a page of size 13312 for bin = 11
8 adding a page of size 66560 for bin = 63
17 adding a page of size 9216 for bin = 7
18 adding a page of size 5120 for bin = 3
25 adding a page of size 6144 for bin = 4
45 adding a page of size 3072 for bin = 1
56 adding a page of size 10240 for bin = 8
56 adding a page of size 12288 for bin = 10
88 adding a page of size 2048 for bin = 0
131 adding a page of size 11264 for bin = 9
412 adding a page of size 4096 for bin = 2
8902 adding a page of size 17408 for bin = 15
8919 adding a page of size 8192 for bin = 6
25042 adding a page of size 7168 for bin = 5
1 adding a page of size 18432 for bin = 16
1 adding a page of size 20480 for bin = 18
1 adding a page of size 21504 for bin = 19
1 adding a page of size 22528 for bin = 20
1 adding a page of size 28672 for bin = 26
1 adding a page of size 33792 for bin = 31
1 adding a page of size 34816 for bin = 32
1 adding a page of size 47104 for bin = 44
2 adding a page of size 16384 for bin = 14
2 adding a page of size 19456 for bin = 17
4 adding a page of size 23552 for bin = 21
4 adding a page of size 36864 for bin = 7
4 adding a page of size 50176 for bin = 47
5 adding a page of size 20480 for bin = 3
5 adding a page of size 25600 for bin = 23
6 adding a page of size 24576 for bin = 4
8 adding a page of size 66560 for bin = 63
9 adding a page of size 13312 for bin = 11
13 adding a page of size 40960 for bin = 8
19 adding a page of size 12288 for bin = 1
25 adding a page of size 65536 for bin = 2
28 adding a page of size 8192 for bin = 0
56 adding a page of size 12288 for bin = 10
131 adding a page of size 11264 for bin = 9
1210 adding a page of size 139264 for bin = 15
1852 adding a page of size 114688 for bin = 5
2426 adding a page of size 32768 for bin = 6
diff --git src/core/fixedsizealloc.c src/core/fixedsizealloc.c
index 9ee7304c9..345a3a521 100644
--- src/core/fixedsizealloc.c
+++ src/core/fixedsizealloc.c
@@ -2,6 +2,9 @@
#include "memdebug.h"
+#define HEAPTRACK_DEFINE_VALGRIND_MACROS
+#include "heaptrack_api.h"
+
/* The fixed size allocator provides a thread-safe mechanism for getting and
* releasing fixed-size chunks of memory. Requests larger blocks from the
* operating system, and then allocates out of them. Can certainly be further
@@ -88,9 +91,16 @@ static void setup_bin(MVMFixedSizeAlloc *al, MVMuint32 bin) {
MVMuint32 page_size = MVM_FSA_PAGE_ITEMS * ((bin + 1) << MVM_FSA_BIN_BITS) + MVM_FSA_REDZONE_BYTES * 2 * MVM_FSA_PAGE_ITEMS;
/* We'll just allocate a single page to start off with. */
+ if (bin == 2 || bin == 5)
+ page_size *= 24;
+ else if (bin == 15)
+ page_size *= 8;
+ else if (bin <= 8)
+ page_size *= 4;
al->size_classes[bin].num_pages = 1;
al->size_classes[bin].pages = MVM_malloc(sizeof(void *) * al->size_classes[bin].num_pages);
- al->size_classes[bin].pages[0] = MVM_malloc(page_size);
+ for (int i = 0; i < al->size_classes[bin].num_pages; i++)
+ al->size_classes[bin].pages[i] = MVM_malloc(page_size);
/* Set up allocation position and limit. */
al->size_classes[bin].alloc_pos = al->size_classes[bin].pages[0];
@@ -101,6 +111,13 @@ static void setup_bin(MVMFixedSizeAlloc *al, MVMuint32 bin) {
static void add_page(MVMFixedSizeAlloc *al, MVMuint32 bin) {
/* Work out page size. */
MVMuint32 page_size = MVM_FSA_PAGE_ITEMS * ((bin + 1) << MVM_FSA_BIN_BITS) + MVM_FSA_REDZONE_BYTES * 2 * MVM_FSA_PAGE_ITEMS;
+ if (bin == 2 || bin == 5)
+ page_size *= 24;
+ else if (bin == 15)
+ page_size *= 8;
+ else if (bin <= 8)
+ page_size *= 4;
+ fprintf(stderr, "adding a page of size %u for bin = %u\n", page_size, bin);
/* Add the extra page. */
MVMuint32 cur_page = al->size_classes[bin].num_pages;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment