亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? multi_mem.c

?? 隨機數算法
?? C
字號:
/*********************************************************										**		Build up my own memory control system.  Problem is with	**	bugs in chunk_alloc, and I'd rather have the ram be process		**	controlled rather than on the heap anyway.  I'll let the experts	**	fix egcs and Linux.							**										**					Author = Mike Rosing			**					  date  = Sept. 5, 1999			**     Changed to work with floats instead of FIELD2N 4/7/00			**										*********************************************************/#include <stdio.h>#include "bigfloat.h"#include "multipoly.h"#define block_limit   100000RAMDATA  ram_block[block_limit];#define POOL_SIZE	1024*1024FLOAT	 pool_mem[POOL_SIZE];#define IndexListLength	block_limitELEMENT ramIndexList[ IndexListLength];ELEMENT StartRamIndex, StopRamIndex, IndexListInUse;/*  chunk_alloc dies so rather than debug OS problems I've created my own	memory management.  Designed to handle multivariate polynomial math,	this memory manager  uses a globally allocated pool, a linked list of	pointers into that poool, and an "index list" used to track unused pointers.	Space is allocated from the pool for each MULTIPOLY requested and an	inex into the ram_block array is returned.  This index does not change	for the life of the variable.  This allows me to crunch ram and physically	move data without the mathematics being aware of it.*//*  initialize ram allocation system  */void init_ram_space(){	StartRamIndex = 0;	StopRamIndex = 0;	IndexListInUse = 0;	ramIndexList[0] = 1;	ram_block[0].up = 0;	ram_block[0].down = 0;	ram_block[0].flag = 0;		/*  this is permenent  */	ram_block[0].size = POOL_SIZE;	ram_block[0].start = pool_mem;}/*  ram_block[0] is special.  It always points to the last free ram block	available and its up pointer ill always point to the first memory	block and its down pointer will reference the next to last block.	The purpose of the up and down indecies is to keep ram allocation	order indepenedent of ram_block index.*//*  get a chunk of ram from the pool for a MULTIPOLY. Enter with degree	value preset.  Returns with index into ram_block which contains a 	pointer to ram and value 1 if space available.  Returns garbage index	and value 0 if not enough space available for the MULTIPOLY.	If no space immediately available off end of pool, whole thing is 	crunched once.  If still no space, you get a zero.	Purpose of ramIndexList is to reuse ram_block areas removed during	a crunch.*/int get_space( MULTIPOLY *newpoly){	ELEMENT  need, ramindex;		need = (newpoly->degree + 1)*(sizeof(FLOAT)/sizeof(ELEMENT));	if( ram_block[0].size < need)	{		crunch_ram();		if ( ram_block[0].size < need)		{			newpoly->memdex = -1;			return 0;		}	}	if( IndexListInUse)	{		ramindex = ramIndexList[ StartRamIndex];		StartRamIndex++;		if( StartRamIndex >= StopRamIndex) IndexListInUse = 0;	}	else	{		ramindex = ramIndexList[StopRamIndex];		ramIndexList[StopRamIndex]++;	}		if( ramindex >= block_limit) return 0;  /*  we ran of index space!  */	newpoly->memdex = ramindex;	ram_block[ramindex].start = ram_block[0].start;	ram_block[0].start += need;	ram_block[0].size -= need;	ram_block[ramindex].size = need;	ram_block[ramindex].up = 0;	ram_block[ramindex].down  = ram_block[0].down;	ram_block[ram_block[0].down].up = ramindex;	ram_block[0].down = ramindex;	ram_block[ramindex].flag = 1;	return 1;}/*  crunch memory:  Squeeze all the free space out of pool_mem.  I do this	in a crude way but the purpose is to isolate the math code from memory 	management problems. 	ram_block[] contains a pointer to a block of FIELD2N (called .start), the	number of FIELD2N's (.size) and .up, .down number containing the pointer	of the next and previous memory blocks respectively.	The ramIndexList[] tells me which indecies into ram_block have been	removed after two free spaces have been concatenated.  It's a list of	NULL pointers in ram_block.*/void  crunch_ram(){	ELEMENT	index, up, down, up2, size;	FLOAT	*from, *to;	/*  if this is not first time here, reset ramIndexList pointers.	use cyclic buffer to avoid this step.*/	if( IndexListInUse)	{		index = 0;		while( StartRamIndex <= StopRamIndex)		{			ramIndexList[index] = ramIndexList[StartRamIndex];			StartRamIndex++;			index++;		}		StartRamIndex = 0;		StopRamIndex = index - 1;	}/*  next concatenate any free space regions  */	index = 1;	while( index)	{		if( ram_block[index].flag)  index = ram_block[index].up;  /*  look for a free block*/		else		{			up = ram_block[index].up;			if( !ram_block[up].flag)  /* two free blocks in a row at this point */			{				ramIndexList[StopRamIndex+1] = ramIndexList[StopRamIndex];				ramIndexList[StopRamIndex] = index;				IndexListInUse = 1;				StopRamIndex++;				ram_block[up].size += ram_block[index].size;				ram_block[up].start = ram_block[index].start;				down = ram_block[index].down;				ram_block[down].up = up;				ram_block[up].down = down;				index = up;			}			else			{/*  move a used block down in address over a free block and change pointers around */				down = ram_block[index].down;				up2 = ram_block[up].up;				from = ram_block[up].start;				to = ram_block[index].start;				size = ram_block[up].size;				multi_copy( size, from, to);				ram_block[up].start = to;				ram_block[index].start += size;				ram_block[down].up = up;				ram_block[up].down = down;				ram_block[index].up = up2;				ram_block[index].down = up;				ram_block[up2].down = index;			}		}/*  ram_block[index].flag set/clear */	}/*  index traversal  */}/* crunch_ram  *//*  last and simplest routine.	Mark a block of ram as free space.  	Nothing happens until crunch time.*/void free_space( MULTIPOLY *x){	ram_block[x->memdex].flag = 0;}/*  copy a multivariate polynomial to another place.	This is a physical copy, both regions are ASSUMED to actually be able	to hold the data !!Note: exceptionally useful when multiplying by x^k.*/void multi_copy( ELEMENT length, FLOAT *source, FLOAT *destination){	INDEX  i;		if (!length) return;	for( i=0; i<length; i++)	{		copy( source, destination);		source++;		destination++;	}}/*  The following seems like a better interface to the higher level math.	Leave what works alone for now, but this may be able to eliminate	the above routine completely.*/int multi_dup( MULTIPOLY from, MULTIPOLY *to){	INDEX	i;	FLOAT	*f, *t;		to->degree = from.degree;	if( !get_space( to)) return 0;	f = Address( from);	t = AddressOf( to);	for( i=0; i<=from.degree; i++)	{		copy( f, t);		f++;		t++;	}	return 1;}/*main(){	MULTIPOLY	test1, test2, test3;	INDEX		i;		printf("start\n");	init_ram_space();	test1.degree = 25;	get_space( &test1);		printf("Start address is %x, start free space is %x\n", pool_mem, 			ram_block[0].start);	printf("size of space is %d, and it is marked with flag = %d\n",			ram_block[test1.memdex].size, ram_block[test1.memdex].flag);	printf("and the pointer to the ram block for test1 is %x\n",			ram_block[test1.memdex].start);	test2.degree = 63;	get_space(&test2);	test3.degree = 127;	get_space(&test3);	free_space(&test2);	crunch_ram();	printf("index  flag  up   down   size   address\n");	for(i=0; i<5; i++)		printf("  %d     %d    %d     %d      %d         %x\n", i, ram_block[i].flag,			ram_block[i].up, ram_block[i].down, 			ram_block[i].size, ram_block[i].start);	printf("finish\n");}	*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人一区二区精品非洲| 成人精品小蝌蚪| 欧美日韩成人在线| 一区二区三区蜜桃网| 91丨九色丨蝌蚪丨老版| 中文字幕在线观看一区| 成人一级片网址| 国产精品美日韩| av不卡免费电影| 日韩美女久久久| 色综合婷婷久久| 亚洲最大色网站| 欧美影片第一页| 亚洲成人中文在线| 9191精品国产综合久久久久久| 午夜精品久久久久久久久久久| 精品视频999| 日韩综合小视频| 欧美一二三区在线观看| 久久激情综合网| 久久久国产综合精品女国产盗摄| 国产乱码精品一区二区三| 久久蜜桃一区二区| 岛国精品在线观看| |精品福利一区二区三区| 色综合天天狠狠| 亚洲va欧美va国产va天堂影院| 在线不卡一区二区| 麻豆91在线播放| 久久免费精品国产久精品久久久久 | 日本一二三四高清不卡| 成人午夜视频福利| 亚洲欧美另类图片小说| 精品视频全国免费看| 日本人妖一区二区| xfplay精品久久| 成人sese在线| 亚洲第一综合色| 日韩精品一区二区三区在线播放| 国产一区二区看久久| 最新不卡av在线| 欧美日韩久久不卡| 国产真实乱对白精彩久久| 国产精品国产自产拍高清av王其| 91国偷自产一区二区三区观看| 日韩av一区二区三区| 久久精品一区八戒影视| 一本一道久久a久久精品综合蜜臀| 亚洲mv大片欧洲mv大片精品| 久久综合九色综合久久久精品综合 | 91无套直看片红桃| 日韩福利视频导航| 国产欧美日韩在线看| 色综合久久精品| 理论片日本一区| 《视频一区视频二区| 欧美一区二区在线看| 国产91丝袜在线18| 亚洲国产日韩精品| 久久久久久9999| 欧美午夜片在线看| 国产老肥熟一区二区三区| 亚洲免费看黄网站| 日韩美女在线视频| 99精品视频在线播放观看| 日韩精品久久理论片| 欧美国产日韩一二三区| 欧美精品久久天天躁| 国产成人av一区二区三区在线观看| 一区二区三区四区不卡在线| 精品国产区一区| 日本高清不卡视频| 国产黄色精品视频| 午夜精品久久久| 国产精品福利av| 日韩欧美一级在线播放| 色偷偷久久一区二区三区| 国内精品免费**视频| 亚洲国产精品人人做人人爽| 欧美精彩视频一区二区三区| 欧美人狂配大交3d怪物一区| 成人免费看视频| 久久成人18免费观看| 亚洲最快最全在线视频| 欧美激情一二三区| 日韩欧美一区二区三区在线| 在线看日本不卡| 成人激情校园春色| 久草在线在线精品观看| 亚洲高清不卡在线观看| 国产精品视频观看| 亚洲精品一区二区三区精华液| 在线日韩一区二区| av一区二区不卡| 国产一区二区久久| 蜜臀va亚洲va欧美va天堂| 一区二区三区成人在线视频| 国产精品久久久久一区二区三区 | 国产精品麻豆欧美日韩ww| 日韩欧美国产成人一区二区| 欧美日韩专区在线| 色妞www精品视频| 波多野结衣精品在线| 韩国v欧美v日本v亚洲v| 午夜欧美视频在线观看| 一区二区三区在线视频播放| 国产精品国产三级国产普通话蜜臀 | 欧美一区二区三区思思人| 欧洲一区二区三区免费视频| a级精品国产片在线观看| 国产精品77777竹菊影视小说| 六月丁香婷婷色狠狠久久| 日韩国产欧美在线视频| 亚洲一区二区3| 亚洲精品va在线观看| 国产精品高潮呻吟久久| 国产视频一区二区在线观看| 337p日本欧洲亚洲大胆色噜噜| 欧美一二三在线| 日韩一区二区免费在线观看| 欧美裸体bbwbbwbbw| 欧美色视频在线| 欧美性猛片aaaaaaa做受| 日本韩国欧美国产| 91精品福利在线| 欧美亚洲综合另类| 欧美日韩在线精品一区二区三区激情| 色综合久久九月婷婷色综合| 91美女精品福利| 色综合久久久网| 色系网站成人免费| 欧美中文字幕不卡| 欧美在线视频你懂得| 欧美日韩在线播放三区| 欧美日韩三级一区二区| 欧美高清www午色夜在线视频| 欧美老人xxxx18| 欧美一区二区三区爱爱| 欧美成人伊人久久综合网| 欧美成人性福生活免费看| 久久综合九色综合97婷婷女人 | 欧美一区二区三区精品| 91精品国产麻豆国产自产在线| 欧美一二三四区在线| 精品日韩一区二区三区免费视频| 精品国产乱码久久| 国产女人aaa级久久久级| 国产精品久久午夜夜伦鲁鲁| 综合精品久久久| 一区二区三区精品| 午夜精品久久久久久久99水蜜桃 | 在线亚洲+欧美+日本专区| 欧美无乱码久久久免费午夜一区| 欧美片网站yy| 欧美成人一区二区三区| 国产拍欧美日韩视频二区| 亚洲欧洲www| 亚洲6080在线| 久草精品在线观看| 成人av网址在线| 91久久香蕉国产日韩欧美9色| 欧美日韩国产美女| 精品国产免费一区二区三区四区 | 精品久久久影院| 国产精品污网站| 亚洲高清在线视频| 麻豆91免费看| av网站一区二区三区| 欧美午夜精品一区| 精品国产一区a| 亚洲视频1区2区| 丝袜美腿亚洲一区二区图片| 精品一区二区三区久久久| 成人午夜精品在线| 欧美三级蜜桃2在线观看| 精品国产精品一区二区夜夜嗨| 国产精品午夜在线| 香港成人在线视频| 国产成人精品在线看| 在线观看91精品国产入口| 精品久久久网站| 亚洲欧美日韩国产综合| 国精产品一区一区三区mba桃花| 亚洲一区二区三区免费视频| 蜜桃av一区二区| av一本久道久久综合久久鬼色| 欧美精品xxxxbbbb| 亚洲国产精品成人综合| 亚洲www啪成人一区二区麻豆| 国产一区二区在线观看视频| 色视频一区二区| 精品欧美一区二区久久| 亚洲精品老司机| 国产综合色视频| 欧美性生活一区| 国产精品网友自拍| 日韩va欧美va亚洲va久久| 99在线精品视频| xnxx国产精品| 偷窥国产亚洲免费视频|