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

📄 sbvall.c

📁 操作系统源代码
💻 C
字号:
/* VALLOC - Aligned memory allocator *	Emulation of the 4.2BSD library routine of the same name. *	Copyright 1985 by Ken Harrenstien, SRI International *	This software is quasi-public; it may be used freely with *	like software, but may NOT be sold or made part of licensed *	products without permission of the author.  In all cases *	the source code and any modifications thereto must remain *	available to any user. * *	This is part of the SB library package. *	Any software using the SB library must likewise be made *	quasi-public, with freely available sources. */#include "sb.h"char *valloc(size)unsigned size;{	register int pagmsk;	register SBMO i;	register struct smblk *sm, *smr;	struct smblk *sbm_mget(), *sbm_split();	pagmsk = getpagesize() - 1;	/* Get page size in bytes, less 1 */	if(!(sm = sbm_mget(size+pagmsk, size+pagmsk))) /* Get area big enuf */		return(0);	/* Now find # bytes prior to 1st page boundary.	 * This expression gives 0 if already at boundary, else #-1.	 */	i = pagmsk - ((int)(sm->smaddr) & pagmsk);	if(i)		/* If need to split off preceding stuff, */	  {	smr = sbm_split(sm, i+1);	/* do so (note i adjusted) */		sbm_mfree(sm);			/* Release preceding mem */		if(!(sm = smr)) return(0);	/* If couldn't split, fail */	  }	if(i = (sm->smlen - size))	/* See if any trailing stuff */	  {	smr = sbm_split(sm, size);	/* Yeah, split it off too */		if(smr) sbm_mfree(smr);	/* If couldn't split, excess OK. */	  }	return((char *)(sm->smaddr));}

⌨️ 快捷键说明

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