📄 memmap.c
字号:
/* $Id: memmap.c,v 1.2 2003/08/10 11:15:26 pefo Exp $ *//* * Copyright (c) 2001-2003 Opsycon AB (www.opsycon.se / www.opsycon.com) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by Opsycon AB, Sweden. * 4. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */#include <pmon.h>#include <stdlib.h>#include <unistd.h>#include <stdio.h>void *kmemtop;void *memtop;long totalmemsize;extern char end[];char *allocp1 = end;char *heaptop = end + 65536;MemDesc mem_root;intchg_heaptop (name, value) char *name, *value;{ u_int32_t top; if (atob (&top, value, 16)) { if(top < (u_int32_t)allocp1) { printf ("%x: heap is already above this point\n", top); return 0; } heaptop = (char *) top; return 1; } printf ("%s: invalid address\n", value); return 0;}char *sbrk (n) int n;{ char *top; top = heaptop; if (!top) { top = (char *) CLIENTPC; } if ((allocp1 + n) <= top) { allocp1 += n; return (allocp1 - n); } return (0);}voidregister_mem(void *start, void *end, int type, char *desc){ MemDesc *cur = &mem_root; MemDesc *new, *prev; cur->start = (void *)0; cur->end = (void *)-1; new = malloc(sizeof(MemDesc)); new->start = start; new->end = end; new->type = type; new->desc = desc; new->next = NULL; new->sub = NULL; do { /* Subsegment of current? */ if (new->start >= cur->start && new->end <= cur->end) { if (cur->sub == NULL) { cur->sub = new; /* First sub */ return; } else if (cur->sub->start > new->end) { new->next = cur->sub; cur->sub = new; return; } else { cur = cur->sub; } } else { prev = cur; if (new->start > cur->end && cur->next && new->end < cur->next->start) break; cur = cur->next; } } while (cur); new->next = prev->next; prev->next = new;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -