From 3ff27507ccbffba7adf09b2322271606717a9164 Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Mon, 28 Apr 2025 13:21:58 -0400 Subject: heap (brk / sbrk) --- user/heap.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 user/heap.c (limited to 'user/heap.c') diff --git a/user/heap.c b/user/heap.c new file mode 100644 index 0000000..ffa107b --- /dev/null +++ b/user/heap.c @@ -0,0 +1,46 @@ + +#include +#include +#include + +#define PAGE_SIZE 4096 + +int main(void) +{ + void *start, *brk; + + start = sbrk(0); + printf("heap start: %p\n", start); + + // test extending + if (sbrk(PAGE_SIZE) == NULL) { + fprintf(stderr, "failed to extend break\n"); + return 1; + } + + brk = sbrk(0); + printf("new break: %p\n", brk); + + // test reextending + if (sbrk(PAGE_SIZE) == NULL) { + fprintf(stderr, "failed to extend break\n"); + return 1; + } + + brk = sbrk(0); + printf("new new break: %p\n", brk); + + // test shrinking + if (sbrk(-PAGE_SIZE) == NULL) { + fprintf(stderr, "failed to shrink break\n"); + return 1; + } + + brk = sbrk(0); + printf("new new new break: %p\n", brk); + + // test write + memset(start, 1, PAGE_SIZE); + + return 0; +} -- cgit v1.2.3-freya