⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memlib.c

📁 ICS 课程的Lab7
💻 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 + -