|
@@ -16,14 +16,48 @@
|
|
|
|
|
|
#include "myco-memory.h"
|
|
|
|
|
|
+#include <assert.h>
|
|
|
+#include <string.h>
|
|
|
+#include <sys/types.h>
|
|
|
+#include <unistd.h>
|
|
|
+#include <sys/mman.h>
|
|
|
+
|
|
|
void *myco_malloc(size_t size) {
|
|
|
+ if (size == 0) {
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ size_t *pointer;
|
|
|
+ size_t length = size + sizeof(size);
|
|
|
+
|
|
|
+ pointer = mmap(0, length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
|
|
|
+
|
|
|
+ *pointer = length;
|
|
|
+ return (void*)(&pointer[1]);
|
|
|
+
|
|
|
+/*
|
|
|
+ // Default malloc
|
|
|
void *ptr;
|
|
|
ptr = malloc(size);
|
|
|
return ptr;
|
|
|
+*/
|
|
|
}
|
|
|
|
|
|
void myco_free(void *ptr) {
|
|
|
+ if (ptr == NULL) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ size_t *pointer = (size_t*)ptr;
|
|
|
+ size_t length;
|
|
|
+
|
|
|
+ pointer--;
|
|
|
+ length = *pointer;
|
|
|
+
|
|
|
+ munmap((void*)pointer, length);
|
|
|
+
|
|
|
+/*
|
|
|
+ // Default free
|
|
|
return free(ptr);
|
|
|
+*/
|
|
|
}
|
|
|
|
|
|
void *myco_calloc(size_t nmeb, size_t size) {
|