📄 memlib.c
字号:
/* * memlib.c - a module that simulates the memory system. Needed because it * allows us to interleave calls from the student's malloc package * with the system's malloc package in libc. */#include <stdio.h>#include <stdlib.h>#include <assert.h>#include <unistd.h>#include <sys/mman.h>#include <string.h>#include <errno.h>#include "memlib.h"#include "config.h"/* private variables */static void *mem_start_brk; /* points to first byte of heap */static void *mem_brk; /* points to last byte of heap */static void *mem_max_addr; /* largest legal heap address */ /* * mem_init - initialize the memory system model */void mem_init(void){ /* allocate the storage we will use to model the available VM */ if ((mem_start_brk = (void *)malloc(MAX_HEAP)) == NULL) { fprintf(stderr, "mem_init_vm: malloc error\n"); exit(1); } mem_max_addr = mem_start_brk + MAX_HEAP; /* max legal heap address */ mem_brk = mem_start_brk; /* heap is empty initially */}/* * mem_deinit - free the storage used by the memory system model */void mem_deinit(void){ free(mem_start_brk);}/* * mem_reset_brk - reset the simulated brk pointer to make an empty heap */void mem_reset_brk(){ mem_brk = mem_start_brk;}/* * mem_sbrk - simple model of the sbrk function. Extends the heap * by incr bytes and returns the start address of the new area. In * this model, the heap cannot be shrunk. */void *mem_sbrk(int incr) { void *old_brk = mem_brk; if ( (incr < 0) || ((mem_brk + incr) > mem_max_addr)) { errno = ENOMEM; fprintf(stderr, "ERROR: mem_sbrk failed. Ran out of memory...\n"); return (void *)-1; } mem_brk += incr; return old_brk;}/* * mem_heap_lo - return address of the first heap byte */void *mem_heap_lo(){ return mem_start_brk;}/* * mem_heap_hi - return address of last heap byte */void *mem_heap_hi(){ return mem_brk - 1;}/* * mem_heapsize() - returns the heap size in bytes */size_t mem_heapsize() { return mem_brk - mem_start_brk;}/* * mem_pagesize() - returns the page size of the system */size_t mem_pagesize(){ return (size_t)getpagesize();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -