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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? erl_memory_trace_block_table.c

?? OTP是開放電信平臺(tái)的簡稱
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* ``The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved via the world wide web at http://www.erlang.org/. *  * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. *  * The Initial Developer of the Original Code is Ericsson Utvecklings AB. * Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings * AB. All Rights Reserved.'' *  *     $Id$ *//* * Description:	 * * Author: 	Rickard Green *//* Headers to include ... */#ifdef HAVE_CONFIG_H#	include "config.h"#endif#include "erl_memory_trace_block_table.h"#include <errno.h>#undef HARD_DEBUG#undef REALLY_HARD_DEBUG#ifdef DEBUG#  define HARD_DEBUG 0#  define REALLY_HARD_DEBUG 0#else#  define HARD_DEBUG 0#  define REALLY_HARD_DEBUG 0#endif/* Some system specific defines ... */#if defined(__WIN32__) && !defined(__GNUC__)#	define INLINE __forceinline#else#	ifdef __GNUC__#		define INLINE __inline__#	else#		define INLINE#	endif#endif/* Our own assert() ... */#ifdef DEBUG#define ASSERT(A) ((void) ((A) ? 1 : assert_failed(__FILE__, __LINE__, #A)))#include <stdio.h>static int assert_failed(char *f, int l, char *a){    fprintf(stderr, "%s:%d: Assertion failed: %s\n", f, l, a);    abort();    return 0;}#else#define ASSERT(A) ((void) 1)#endif#define EMTBT_BLOCKS_PER_POOL 1000typedef struct emtbt_block_pool_ {    struct emtbt_block_pool_ *next;    emtbt_block blocks[1];} emtbt_block_pool;struct emtbt_table_ {    void * (*alloc)(size_t);    void * (*realloc)(void *, size_t);    void   (*free)(void *);    int is_64_bit;    int no_blocks;    int no_of_buckets;    int max_used_buckets;    int min_used_buckets;    int used_buckets;    int current_size_index;    emtbt_block *blocks;    emtbt_block ** buckets;    /* Fixed size allocation of blocks */    emtbt_block_pool *block_pools;    emtbt_block *free_blocks;    int blocks_per_pool;};static emtbt_block null_blk = {0};/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\ * Block table                                                             * *                                                                         *\*                                                                         */#if HARD_DEBUGstatic void check_table(emtbt_table *table);#endifstatic emtbt_block *block_alloc_new_pool(emtbt_table *tab){    size_t size;    emtbt_block_pool *poolp;    size = sizeof(emtbt_block_pool) - sizeof(emtbt_block);    size += tab->blocks_per_pool*sizeof(emtbt_block);    poolp = (*tab->alloc)(size);    if (poolp) {	int i;	emtbt_block *blks;	poolp->next = tab->block_pools;	tab->block_pools = poolp;	blks = (emtbt_block *) poolp->blocks;	for (i = 1; i < tab->blocks_per_pool - 1; i++)	    blks[i].next = &blks[i + 1];	blks[tab->blocks_per_pool - 1].next = NULL;	tab->free_blocks = &blks[1];	return &blks[0];    }    return NULL;}static INLINE emtbt_block *block_alloc(emtbt_table *tab){    emtbt_block *res;#if HARD_DEBUG    check_table(tab);#endif    if (tab->free_blocks) {	res = tab->free_blocks;	tab->free_blocks = tab->free_blocks->next;    }    else {	res = block_alloc_new_pool(tab);    }#ifdef DEBUG    res->next = ((emtbt_block *) 0xfffffff0);    res->prev = ((emtbt_block *) 0xfffffff0);    res->bucket = ((emtbt_block **) 0xfffffff0);#endif#if HARD_DEBUG    check_table(tab);#endif    return res;}static INLINE voidblock_free(emtbt_table *tab, emtbt_block *bp){#if HARD_DEBUG    check_table(tab);#endif    bp->next = tab->free_blocks;    tab->free_blocks = bp;#if HARD_DEBUG    check_table(tab);#endif}#define PRIME0 ((usgnd_int_32) 268438039)#define PRIME1 ((usgnd_int_32) 268440479)#define PRIME2 ((usgnd_int_32) 268439161)#define PRIME3 ((usgnd_int_32) 268437017)#define MK_HASH(H, P, IS64)						\do {									\    (H) = (P) & 0xff;							\    (H) *= PRIME0;							\    (H) += ((P) >> 8) & 0xff;						\    (H) *= PRIME1;							\    (H) += ((P) >> 16) & 0xff;						\    (H) *= PRIME2;							\    (H) += ((P) >> 24) & 0xff;						\    (H) *= PRIME3;							\    if ((IS64)) {							\	(H) += ((P) >> 32) & 0xff;					\	(H) *= PRIME0;							\	(H) += ((P) >> 40) & 0xff;					\	(H) *= PRIME1;							\	(H) += ((P) >> 48) & 0xff;					\	(H) *= PRIME2;							\	(H) += ((P) >> 56) & 0xff;					\	(H) *= PRIME3;							\    }									\} while (0)static const int table_sizes[] = {    3203,    4813,    6421,    9643,    12853,    19289,    25717,    51437,    102877,    205759,    411527,    823117,    1646237,    3292489,    6584983,    13169977,    26339969,    52679969};#if HARD_DEBUGstatic voidcheck_table(emtbt_table *table){    int no_blocks;    emtbt_block *block, *prev_block;    no_blocks = 0;    block = table->blocks;    ASSERT(!block || !block->prev);    prev_block = NULL;    while (block) {	usgnd_int_32 hash;	MK_HASH(hash, block->pointer, table->is_64_bit);	ASSERT(hash == block->hash);	ASSERT(block->bucket - table->buckets	       == hash % table->no_of_buckets);	ASSERT(!prev_block || prev_block == block->prev);	prev_block = block;	block = block->next;	no_blocks++;	ASSERT(table->no_blocks >= no_blocks);    }    ASSERT(table->no_blocks == no_blocks);#if REALLY_HARD_DEBUG    {	int i;	for (i = 0; i < table->no_of_buckets; i++) {	    int bucket_end_found;	    emtbt_block **bucket;	    if (!table->buckets[i])		continue;	    bucket_end_found = 0;	    bucket = &table->buckets[i];	    for (block = table->blocks; block; block = block->next) {		if (block->bucket == bucket) {		    if (!block->prev || block->prev->bucket != bucket)			ASSERT(*bucket == block);		    if (!block->next || block->next->bucket != bucket)			bucket_end_found++;		}	    }	    ASSERT(bucket_end_found);	}    }#endif}#endifstatic INLINE voidlink_block(emtbt_table *table, emtbt_block **bucket, emtbt_block *block){    ASSERT(bucket);    block->bucket = bucket;    if (*bucket) {	block->next = *bucket;	block->prev = (*bucket)->prev;	if (block->prev)	    block->prev->next = block;	else	    table->blocks = block;	block->next->prev = block;    }    else {	block->next = table->blocks;	block->prev = NULL;	if (table->blocks)	    table->blocks->prev = block;	table->blocks = block;	table->used_buckets++;    }    *bucket = block;    table->no_blocks++;#if HARD_DEBUG    check_table(table);#endif}static intresize_table(emtbt_table *table, int new_no_of_buckets){#ifdef DEBUG    int org_no_blocks;#endif    int i;    emtbt_block *block;    emtbt_block **buckets;    if (new_no_of_buckets < table->no_of_buckets) {	/* shrink never fails */	buckets = (emtbt_block **) (*table->realloc)(table->buckets,						     (sizeof(emtbt_block *)						      * new_no_of_buckets));	if (!buckets)	    return 1;    }    else if (new_no_of_buckets > table->no_of_buckets) {	(*table->free)((void *) table->buckets);	buckets = (emtbt_block **) (*table->alloc)((sizeof(emtbt_block *)						    * new_no_of_buckets));	if (!buckets)	    return 0;    }    else	return 1;    table->buckets = buckets;    table->no_of_buckets = new_no_of_buckets;    table->max_used_buckets = (4*new_no_of_buckets)/5;    table->min_used_buckets = new_no_of_buckets/5;    table->used_buckets = 0;#ifdef DEBUG    org_no_blocks = table->no_blocks;#endif    table->no_blocks = 0;        for (i = 0; i < new_no_of_buckets; i++)	buckets[i] = NULL;    block = table->blocks;    table->blocks = NULL;    while (block) {	emtbt_block *next_block = block->next;	link_block(table,&table->buckets[block->hash%new_no_of_buckets],block);	block = next_block;    }    ASSERT(org_no_blocks == table->no_blocks);    return 1;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕的久久| 婷婷丁香久久五月婷婷| 欧美日韩在线播放| 国产精品综合久久| 亚洲电影第三页| 亚洲国产精品av| 日韩一卡二卡三卡| 色狠狠色狠狠综合| 成人国产精品免费| 国产精品18久久久久久久久| 视频一区欧美精品| 亚洲一区二区在线免费观看视频| 欧美成人高清电影在线| 欧美日韩精品一二三区| 91网址在线看| 豆国产96在线|亚洲| 国内欧美视频一区二区| 日韩高清不卡一区| 亚洲制服丝袜在线| 综合av第一页| 中文字幕乱码一区二区免费| 久久综合色之久久综合| 欧美成人精品1314www| 制服丝袜亚洲网站| 欧美日韩国产另类一区| 欧洲视频一区二区| 日本韩国欧美一区二区三区| 9l国产精品久久久久麻豆| 国产不卡在线播放| 国产精品一级在线| 国产精品18久久久久| 韩国女主播成人在线| 精品中文字幕一区二区 | 亚洲另类中文字| 中文字幕在线观看不卡视频| 国产精品美女久久久久aⅴ国产馆| 精品成人免费观看| 久久久777精品电影网影网 | 一区二区在线看| 亚洲视频一区在线观看| **网站欧美大片在线观看| 中文字幕一区不卡| 亚洲蜜桃精久久久久久久| 亚洲综合精品自拍| 天天综合天天综合色| 日韩精品免费视频人成| 免费一级欧美片在线观看| 麻豆91小视频| 国产成人午夜高潮毛片| 成人伦理片在线| 日本韩国视频一区二区| 欧美日本视频在线| 日韩色视频在线观看| 精品福利二区三区| 国产精品麻豆欧美日韩ww| 18欧美亚洲精品| 亚洲国产综合在线| 蜜臀99久久精品久久久久久软件| 久久精品国产免费| 成人性生交大片免费看视频在线| 99精品热视频| 欧美日韩国产美| 久久久久久久久久久久久久久99 | 视频一区欧美日韩| 国产真实乱对白精彩久久| 成人精品gif动图一区| 欧美在线播放高清精品| 日韩精品最新网址| 国产精品久久久久一区| 亚洲午夜免费福利视频| 麻豆国产欧美一区二区三区| 成人精品亚洲人成在线| 国产无一区二区| 亚洲一区二区视频在线观看| 免费在线看一区| 波多野结衣中文字幕一区二区三区 | 国产一区二区三区精品欧美日韩一区二区三区| 激情成人综合网| 色综合久久久久久久久久久| 欧美一区二区三区在线观看| 国产精品丝袜91| 日韩avvvv在线播放| av电影天堂一区二区在线观看| 欧美日本韩国一区二区三区视频| 久久精品欧美日韩精品 | 强制捆绑调教一区二区| 国产69精品一区二区亚洲孕妇| 色综合久久中文综合久久97| 欧美一级日韩免费不卡| 日韩一区欧美一区| 久久99精品久久久久久国产越南| 91在线精品一区二区| 精品久久一区二区| 亚洲小说春色综合另类电影| 国产成人亚洲精品青草天美| 欧美人与z0zoxxxx视频| 亚洲视频一区在线| 国产在线播放一区三区四| 欧美日韩大陆在线| 日韩理论片中文av| 国产精品自拍av| 91麻豆精品国产自产在线观看一区| 成人欧美一区二区三区白人| 国产一区三区三区| 欧美精品18+| 亚洲综合一二三区| 播五月开心婷婷综合| 久久久亚洲高清| 久久99精品国产| 91精品在线免费观看| 一区二区三区四区五区视频在线观看| 国产精品一区二区在线观看不卡 | 精品国产乱码91久久久久久网站| 樱桃国产成人精品视频| 国产成人av电影在线| 精品国产一区二区三区忘忧草| 视频一区在线视频| 欧美日韩色综合| 亚洲成人激情社区| 欧美亚洲综合色| 一区二区在线观看视频在线观看| 成人国产电影网| 国产精品美女一区二区三区| 国产综合久久久久久鬼色| 欧美成人r级一区二区三区| 日本色综合中文字幕| 91精品在线免费| 日韩精品每日更新| 日韩视频中午一区| 久久国产麻豆精品| 精品欧美一区二区三区精品久久| 日韩精品三区四区| 日韩西西人体444www| 免费的国产精品| 亚洲色欲色欲www| 国产精品一区二区91| 久久精品一区二区三区四区| 国产精品456| 亚洲国产成人私人影院tom| 国产成人综合精品三级| 国产女主播视频一区二区| 国产成人综合网站| 国产精品乱码人人做人人爱| av动漫一区二区| 亚洲品质自拍视频网站| 欧美性感一类影片在线播放| 图片区日韩欧美亚洲| 欧美一级艳片视频免费观看| 激情图片小说一区| 国产丝袜欧美中文另类| 北条麻妃国产九九精品视频| 亚洲精品中文在线| 欧美日韩aaa| 国产一区二区在线看| 国产欧美日韩麻豆91| 91小视频免费看| 亚洲第一成人在线| 精品国产精品一区二区夜夜嗨| 国产91色综合久久免费分享| 亚洲三级免费电影| 国产网站一区二区| 色婷婷狠狠综合| 蜜桃传媒麻豆第一区在线观看| 久久一区二区三区四区| 99久久久久久| 日韩精品国产精品| 国产午夜亚洲精品不卡| 色综合久久99| 精品一区在线看| 亚洲日本欧美天堂| 欧美一区二区在线观看| 国产精品123| 亚洲一区欧美一区| 久久午夜免费电影| 日本精品视频一区二区三区| 蜜桃av一区二区三区电影| 国产女同互慰高潮91漫画| 欧美日韩一区二区三区四区| 韩国一区二区三区| 一区二区三区在线视频观看 | 97精品久久久午夜一区二区三区| 亚洲成人综合网站| 亚洲国产精品ⅴa在线观看| 欧美视频在线观看一区二区| 国产乱码精品一区二区三| 亚洲香肠在线观看| 国产无遮挡一区二区三区毛片日本| 欧美午夜在线观看| 大桥未久av一区二区三区中文| 天天av天天翘天天综合网色鬼国产| 国产亚洲成av人在线观看导航| 欧美日韩视频在线一区二区| 成人一区在线看| 日韩电影在线一区| 一级女性全黄久久生活片免费| 久久久欧美精品sm网站| 91精品国产色综合久久ai换脸| 99久久精品国产一区二区三区| 激情av综合网| 蜜桃av一区二区在线观看|