summaryrefslogtreecommitdiff
path: root/user
diff options
context:
space:
mode:
Diffstat (limited to 'user')
-rw-r--r--user/heap.c46
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;
+}