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

📄 heap.c

📁 Windows上的精简Linux系统
💻 C
字号:
/* * Very simple heap manager. * Allocation Strategy: The lower end of the heap, is the end of the BSS. * * During an alloc, if there is enough space below the high end of heap,  *    we return a pointer to the allocated space and move curr. * Space once allocated is never deallocated! * We run out of space if we get within BUFSIZE bytes of the stack pointer. */#include "heap.h"#include "string.h"#include "biosio.h"#ifndef NULL#define NULL ((void *)0)#endifextern char _end[];static unsigned int heap_curr  = (unsigned int)_end;static inline unsigned int currsp(void){    unsigned int esp;        asm("movl %%esp,%0 " : "=rm" (esp));    return esp;}static inline void _checkheap(void){    if (currsp() < heap_curr) // Heap corrupted    {	csprint("\r\nHeap overflow, aborting!\r\n",0x07);	asm volatile("int $0x21" : : "a" (0x4C7f)); /* Exit with error */	return;    }}void * malloc(unsigned int num) // Allocate so much space{    unsigned int ans, heap_max;    _checkheap();    heap_max = currsp() - STACKSIZE;    ans = (heap_curr+3) & ~3;	// Align to 4-byte boundary    if ( ans+num > heap_max )	return NULL;    heap_curr = ans+num;    return (void *) ans;}/* We don't actually ever use these; if enabled,   probably _checkheap() shouldn't be inline.*/#if 0int checkalloc(unsigned int num){    _checkheap();    return (heap_curr + num < heap_max);}void free(void * ptr){    _checkheap();    return;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -