diff options
author | Freya Murphy <freya@freyacat.org> | 2025-04-28 13:21:58 -0400 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-04-28 13:21:58 -0400 |
commit | 3ff27507ccbffba7adf09b2322271606717a9164 (patch) | |
tree | d5bebb27d3bd906ad25cd9687ba0ac28e556e33a /user/heap.c | |
parent | allocate vaddrs when given directly (diff) | |
download | comus-3ff27507ccbffba7adf09b2322271606717a9164.tar.gz comus-3ff27507ccbffba7adf09b2322271606717a9164.tar.bz2 comus-3ff27507ccbffba7adf09b2322271606717a9164.zip |
heap (brk / sbrk)
Diffstat (limited to '')
-rw-r--r-- | user/heap.c | 46 |
1 files changed, 46 insertions, 0 deletions
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 <unistd.h> +#include <string.h> +#include <stdio.h> + +#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; +} |