vmprivate.c revision 1
1N/A/*********************************************************************** 1N/A* This software is part of the ast package * 1N/A* Copyright (c) 1985-2011 AT&T Intellectual Property * 1N/A* and is licensed under the * 1N/A* Common Public License, Version 1.0 * 1N/A* by AT&T Intellectual Property * 1N/A* A copy of the License is available at * 1N/A* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 1N/A* Information and Software Systems Research * 1N/A* Glenn Fowler <gsf@research.att.com> * 1N/A* David Korn <dgk@research.att.com> * 1N/A* Phong Vo <kpv@research.att.com> * 1N/A***********************************************************************/ 1N/Astatic char*
Version =
"\n@(#)$Id: Vmalloc (AT&T Research) 2010-01-01 $\0\n";
1N/A/* Private code used in the vmalloc library 1N/A** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94. 1N/A/* Get more memory for a region */ 1N/A#
if DEBUG /* trace all allocation calls through the heap */ 1N/A if(
vd->
incr <= 0)
/* this is just _Vmheap on the first call */ 1N/A /* Get slightly more for administrative data */ 1N/A if(s <=
size)
/* size was too large and we have wrapped around */ 1N/A /* increase the rounding factor to reduce # of future extensions */ 1N/A /* see if we can extend the current segment */ 1N/A while(!
addr)
/* try to get space */ 1N/A /* check with exception handler to see if we should continue */ 1N/A {
/* extending current segment */ 1N/A {
/* creating a new segment */ 1N/A /* NOTE: for Vmbest, Vmdebug and Vmprofile the region's segment list 1N/A is reversely ordered by addresses. This is so that we can easily 1N/A check for the wild block. 1N/A /* make a fake header for possible segmented memory */ 1N/A /* see if the wild block is still wild */ 1N/A/* Truncate a segment if possible */ 1N/A else /* keep truncated amount to discipline requirements */ 1N/A {
/* unlink segment from region */ 1N/A /* space reduction failed, reinsert segment */ 1N/A/* Externally visible names but local to library */ 1N/A 0,
/* _Vmpagesize */ 1N/A NIL(
char*(*)
_ARG_((
char*,
const char*,
int))),
/* _Vmstrcpy */