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

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

?? arena.c

?? 一個很好的內存泄露的監測代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* Malloc implementation for multiple threads without lock contention.   Copyright (C) 2001 Free Software Foundation, Inc.   This file is part of the GNU C Library.   Contributed by Wolfram Gloger <wg@malloc.de>, 2001.   The GNU C Library is free software; you can redistribute it and/or   modify it under the terms of the GNU Library General Public License as   published by the Free Software Foundation; either version 2 of the   License, or (at your option) any later version.   The GNU C Library is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   Library General Public License for more details.   You should have received a copy of the GNU Library General Public   License along with the GNU C Library; see the file COPYING.LIB.  If not,   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,   Boston, MA 02111-1307, USA.  *//* $Id: arena.c,v 1.9 2004/11/05 14:42:23 wg Exp $ *//* Compile-time constants.  */#define HEAP_MIN_SIZE (32*1024)#ifndef HEAP_MAX_SIZE#define HEAP_MAX_SIZE (1024*1024) /* must be a power of two */#endif/* HEAP_MIN_SIZE and HEAP_MAX_SIZE limit the size of mmap()ed heaps   that are dynamically created for multi-threaded programs.  The   maximum size must be a power of two, for fast determination of   which heap belongs to a chunk.  It should be much larger than the   mmap threshold, so that requests with a size just below that   threshold can be fulfilled without creating too many heaps.  */#ifndef THREAD_STATS#define THREAD_STATS 0#endif/* If THREAD_STATS is non-zero, some statistics on mutex locking are   computed.  *//***************************************************************************/#define top(ar_ptr) ((ar_ptr)->top)/* A heap is a single contiguous memory region holding (coalesceable)   malloc_chunks.  It is allocated with mmap() and always starts at an   address aligned to HEAP_MAX_SIZE.  Not used unless compiling with   USE_ARENAS. */typedef struct _heap_info {  mstate ar_ptr; /* Arena for this heap. */  struct _heap_info *prev; /* Previous heap. */  size_t size;   /* Current size in bytes. */  size_t pad;    /* Make sure the following data is properly aligned. */} heap_info;/* Thread specific data */static tsd_key_t arena_key;static mutex_t list_lock;#if THREAD_STATSstatic int stat_n_heaps;#define THREAD_STAT(x) x#else#define THREAD_STAT(x) do ; while(0)#endif/* Mapped memory in non-main arenas (reliable only for NO_THREADS). */static unsigned long arena_mem;/* Already initialized? */int __malloc_initialized = -1;/**************************************************************************/#if USE_ARENAS/* arena_get() acquires an arena and locks the corresponding mutex.   First, try the one last locked successfully by this thread.  (This   is the common case and handled with a macro for speed.)  Then, loop   once over the circularly linked list of arenas.  If no arena is   readily available, create a new one.  In this latter case, `size'   is just a hint as to how much memory will be required immediately   in the new arena. */#define arena_get(ptr, size) do { \  Void_t *vptr = NULL; \  ptr = (mstate)tsd_getspecific(arena_key, vptr); \  if(ptr && !mutex_trylock(&ptr->mutex)) { \    THREAD_STAT(++(ptr->stat_lock_direct)); \  } else \    ptr = arena_get2(ptr, (size)); \} while(0)/* find the heap and corresponding arena for a given ptr */#define heap_for_ptr(ptr) \ ((heap_info *)((unsigned long)(ptr) & ~(HEAP_MAX_SIZE-1)))#define arena_for_chunk(ptr) \ (chunk_non_main_arena(ptr) ? heap_for_ptr(ptr)->ar_ptr : &main_arena)#else /* !USE_ARENAS *//* There is only one arena, main_arena. */#if THREAD_STATS#define arena_get(ar_ptr, sz) do { \  ar_ptr = &main_arena; \  if(!mutex_trylock(&ar_ptr->mutex)) \    ++(ar_ptr->stat_lock_direct); \  else { \    (void)mutex_lock(&ar_ptr->mutex); \    ++(ar_ptr->stat_lock_wait); \  } \} while(0)#else#define arena_get(ar_ptr, sz) do { \  ar_ptr = &main_arena; \  (void)mutex_lock(&ar_ptr->mutex); \} while(0)#endif#define arena_for_chunk(ptr) (&main_arena)#endif /* USE_ARENAS *//**************************************************************************/#ifndef NO_THREADS/* atfork support.  */static __malloc_ptr_t (*save_malloc_hook) __MALLOC_P ((size_t __size,						       __const __malloc_ptr_t));# if !defined _LIBC || !defined USE_TLS || (defined SHARED && !USE___THREAD)static __malloc_ptr_t (*save_memalign_hook) __MALLOC_P ((size_t __align,							 size_t __size,						       __const __malloc_ptr_t));# endifstatic void           (*save_free_hook) __MALLOC_P ((__malloc_ptr_t __ptr,						     __const __malloc_ptr_t));static Void_t*        save_arena;/* Magic value for the thread-specific arena pointer when   malloc_atfork() is in use.  */#define ATFORK_ARENA_PTR ((Void_t*)-1)/* The following hooks are used while the `atfork' handling mechanism   is active. */static Void_t*malloc_atfork(size_t sz, const Void_t *caller){  Void_t *vptr = NULL;  Void_t *victim;  tsd_getspecific(arena_key, vptr);  if(vptr == ATFORK_ARENA_PTR) {    /* We are the only thread that may allocate at all.  */    if(save_malloc_hook != malloc_check) {      return _int_malloc(&main_arena, sz);    } else {      if(top_check()<0)        return 0;      victim = _int_malloc(&main_arena, sz+1);      return mem2mem_check(victim, sz);    }  } else {    /* Suspend the thread until the `atfork' handlers have completed.       By that time, the hooks will have been reset as well, so that       mALLOc() can be used again. */    (void)mutex_lock(&list_lock);    (void)mutex_unlock(&list_lock);    return public_mALLOc(sz);  }}static voidfree_atfork(Void_t* mem, const Void_t *caller){  Void_t *vptr = NULL;  mstate ar_ptr;  mchunkptr p;                          /* chunk corresponding to mem */  if (mem == 0)                              /* free(0) has no effect */    return;  p = mem2chunk(mem);         /* do not bother to replicate free_check here */#if HAVE_MMAP  if (chunk_is_mmapped(p))                       /* release mmapped memory. */  {    munmap_chunk(p);    return;  }#endif  ar_ptr = arena_for_chunk(p);  tsd_getspecific(arena_key, vptr);  if(vptr != ATFORK_ARENA_PTR)    (void)mutex_lock(&ar_ptr->mutex);  _int_free(ar_ptr, mem);  if(vptr != ATFORK_ARENA_PTR)    (void)mutex_unlock(&ar_ptr->mutex);}/* The following two functions are registered via thread_atfork() to   make sure that the mutexes remain in a consistent state in the   fork()ed version of a thread.  Also adapt the malloc and free hooks   temporarily, because the `atfork' handler mechanism may use   malloc/free internally (e.g. in LinuxThreads). */static voidptmalloc_lock_all __MALLOC_P((void)){  mstate ar_ptr;  if(__malloc_initialized < 1)    return;  (void)mutex_lock(&list_lock);  for(ar_ptr = &main_arena;;) {    (void)mutex_lock(&ar_ptr->mutex);    ar_ptr = ar_ptr->next;    if(ar_ptr == &main_arena) break;  }  save_malloc_hook = __malloc_hook;  save_free_hook = __free_hook;  __malloc_hook = malloc_atfork;  __free_hook = free_atfork;  /* Only the current thread may perform malloc/free calls now. */  tsd_getspecific(arena_key, save_arena);  tsd_setspecific(arena_key, ATFORK_ARENA_PTR);}static voidptmalloc_unlock_all __MALLOC_P((void)){  mstate ar_ptr;  if(__malloc_initialized < 1)    return;  tsd_setspecific(arena_key, save_arena);  __malloc_hook = save_malloc_hook;  __free_hook = save_free_hook;  for(ar_ptr = &main_arena;;) {    (void)mutex_unlock(&ar_ptr->mutex);    ar_ptr = ar_ptr->next;    if(ar_ptr == &main_arena) break;  }  (void)mutex_unlock(&list_lock);}#ifdef __linux__/* In LinuxThreads, unlocking a mutex in the child process after a   fork() is currently unsafe, whereas re-initializing it is safe and   does not leak resources.  Therefore, a special atfork handler is   installed for the child. */static voidptmalloc_unlock_all2 __MALLOC_P((void)){  mstate ar_ptr;  if(__malloc_initialized < 1)    return;#if defined _LIBC || defined MALLOC_HOOKS  tsd_setspecific(arena_key, save_arena);  __malloc_hook = save_malloc_hook;  __free_hook = save_free_hook;#endif  for(ar_ptr = &main_arena;;) {    (void)mutex_init(&ar_ptr->mutex);    ar_ptr = ar_ptr->next;    if(ar_ptr == &main_arena) break;  }  (void)mutex_init(&list_lock);}#else#define ptmalloc_unlock_all2 ptmalloc_unlock_all#endif#endif /* !defined NO_THREADS *//* Initialization routine. */#ifdef _LIBC#include <string.h>extern char **_environ;static char *internal_functionnext_env_entry (char ***position){  char **current = *position;  char *result = NULL;  while (*current != NULL)    {      if (__builtin_expect ((*current)[0] == 'M', 0)	  && (*current)[1] == 'A'	  && (*current)[2] == 'L'	  && (*current)[3] == 'L'	  && (*current)[4] == 'O'	  && (*current)[5] == 'C'	  && (*current)[6] == '_')	{	  result = &(*current)[7];	  /* Save current position for next visit.  */	  *position = ++current;	  break;	}      ++current;    }  return result;}#endif /* _LIBC *//* Set up basic state so that _int_malloc et al can work.  */static voidptmalloc_init_minimal __MALLOC_P((void)){#if DEFAULT_TOP_PAD != 0  mp_.top_pad        = DEFAULT_TOP_PAD;#endif  mp_.n_mmaps_max    = DEFAULT_MMAP_MAX;  mp_.mmap_threshold = DEFAULT_MMAP_THRESHOLD;  mp_.trim_threshold = DEFAULT_TRIM_THRESHOLD;  mp_.pagesize       = malloc_getpagesize;}#if !(USE_STARTER & 2)static#endifvoidptmalloc_init __MALLOC_P((void)){#if __STD_C  const char* s;#else  char* s;#endif  int secure = 0;  if(__malloc_initialized >= 0) return;  __malloc_initialized = 0;  if (mp_.pagesize == 0)    ptmalloc_init_minimal();#ifndef NO_THREADS# if USE_STARTER & 1  /* With some threads implementations, creating thread-specific data     or initializing a mutex may call malloc() itself.  Provide a     simple starter version (realloc() won't work). */  save_malloc_hook = __malloc_hook;  save_memalign_hook = __memalign_hook;  save_free_hook = __free_hook;  __malloc_hook = malloc_starter;  __memalign_hook = memalign_starter;  __free_hook = free_starter;#  ifdef _LIBC  /* Initialize the pthreads interface. */  if (__pthread_initialize != NULL)    __pthread_initialize();#  endif /* !defined _LIBC */# endif /* USE_STARTER & 1 */#endif /* !defined NO_THREADS */  mutex_init(&main_arena.mutex);  main_arena.next = &main_arena;  mutex_init(&list_lock);  tsd_key_create(&arena_key, NULL);  tsd_setspecific(arena_key, (Void_t *)&main_arena);  thread_atfork(ptmalloc_lock_all, ptmalloc_unlock_all, ptmalloc_unlock_all2);#ifndef NO_THREADS# if USE_STARTER & 1  __malloc_hook = save_malloc_hook;  __memalign_hook = save_memalign_hook;  __free_hook = save_free_hook;# endif# if USE_STARTER & 2  __malloc_hook = 0;  __memalign_hook = 0;  __free_hook = 0;# endif#endif#ifdef _LIBC  secure = __libc_enable_secure;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美电影一区二区| 亚洲电影一区二区三区| 91精品麻豆日日躁夜夜躁| 北岛玲一区二区三区四区 | 麻豆精品国产91久久久久久| 国产欧美日韩在线视频| 久久亚洲综合色| 日韩午夜在线观看| 91精品在线观看入口| 欧美日韩成人一区| 欧美老人xxxx18| 欧美视频在线观看一区| 欧美自拍偷拍午夜视频| 99久久99久久综合| 色视频欧美一区二区三区| 99在线精品免费| caoporen国产精品视频| 成人免费高清在线| 色婷婷亚洲精品| 色婷婷综合激情| 欧美在线一二三四区| 欧美自拍丝袜亚洲| 91精品国产一区二区三区蜜臀| 4438亚洲最大| 日韩女优av电影| 日韩欧美国产三级电影视频| 久久精品人人做人人爽人人| 久久精品夜夜夜夜久久| 久久精品一区二区三区av| 国产人妖乱国产精品人妖| 亚洲欧洲精品成人久久奇米网| 国产精品欧美久久久久无广告| 国产精品美女久久久久久| 国产精品嫩草影院com| 久久久五月婷婷| 亚洲人123区| 亚洲综合色噜噜狠狠| 亚洲成人福利片| 首页国产欧美日韩丝袜| 国产一区视频网站| 国产.欧美.日韩| 91美女视频网站| 欧美日韩一区二区三区不卡| 2020国产成人综合网| 国产精品午夜春色av| 亚洲欧美偷拍卡通变态| 亚洲成av人片一区二区梦乃| 国产一区二区三区在线观看免费| 国产成人a级片| 91免费小视频| 在线播放中文字幕一区| 91麻豆精品国产自产在线 | 一区二区三区精品视频| 香蕉加勒比综合久久| 另类调教123区| 国产激情一区二区三区桃花岛亚洲| 欧美在线观看视频一区二区| 884aa四虎影成人精品一区| 久久久久久免费网| 亚洲乱码一区二区三区在线观看| 免费在线观看不卡| 99视频一区二区| 欧美精三区欧美精三区| 国产婷婷色一区二区三区四区| 精品剧情在线观看| 日韩理论片在线| 免费观看一级特黄欧美大片| 成人深夜视频在线观看| 一本大道久久a久久精品综合| 日韩亚洲欧美综合| 亚洲视频一二三| 久久成人久久爱| 色哟哟在线观看一区二区三区| 欧美精品一级二级| 又紧又大又爽精品一区二区| 久久66热偷产精品| 色婷婷亚洲婷婷| 精品欧美乱码久久久久久| 亚洲网友自拍偷拍| 国产高清久久久| 在线不卡的av| 国产精品久久久久毛片软件| 国内精品国产成人国产三级粉色| 色婷婷综合久久久久中文一区二区| 精品福利在线导航| 亚洲乱码国产乱码精品精98午夜 | 91美女福利视频| 日韩三级视频在线观看| 一区二区三区四区在线| 国产精品一区二区三区99| 欧美日韩一区中文字幕| 欧美tickling网站挠脚心| 日本不卡中文字幕| 色噜噜狠狠成人网p站| 国产日韩精品视频一区| 日韩精品色哟哟| 欧美日韩1234| 一区二区激情视频| 不卡的av电影| 欧美日韩三级一区| 亚洲在线观看免费视频| av一区二区三区| 欧美国产视频在线| 本田岬高潮一区二区三区| 国产欧美在线观看一区| 九色综合狠狠综合久久| 欧美精品色综合| 亚洲成人av在线电影| 色综合网色综合| 中文字幕在线不卡一区二区三区| 国产在线国偷精品免费看| 欧美精品丝袜久久久中文字幕| 欧美日韩国产另类不卡| 日韩欧美国产系列| 国内精品免费在线观看| 久久综合久久鬼色中文字| 国产一区二区免费看| 国产亚洲1区2区3区| 成人免费毛片嘿嘿连载视频| 综合亚洲深深色噜噜狠狠网站| 色网站国产精品| 日韩高清不卡一区二区三区| 日韩欧美一二三区| 国产91精品精华液一区二区三区 | 91精品国产手机| 裸体健美xxxx欧美裸体表演| 日韩欧美成人激情| 成人看片黄a免费看在线| 亚洲人成伊人成综合网小说| 在线欧美日韩精品| 免费一级片91| 亚洲国产成人在线| 91精品福利视频| 日本欧美久久久久免费播放网| 久久一区二区视频| 91在线国内视频| 日韩精品免费专区| 久久久国产一区二区三区四区小说| 成人av在线影院| 午夜精品久久久久久不卡8050| 精品国产三级电影在线观看| av激情综合网| 日日欢夜夜爽一区| 久久精品视频一区二区| 欧美少妇bbb| 国产在线精品一区二区| 亚洲欧美日韩国产另类专区| 欧美变态tickling挠脚心| 成人av在线播放网站| 日韩不卡在线观看日韩不卡视频| 国产日韩欧美制服另类| 欧美无人高清视频在线观看| 国产一区二区在线看| 亚洲无线码一区二区三区| 久久久蜜桃精品| 欧美精品欧美精品系列| 成人性生交大片免费看中文| 天堂精品中文字幕在线| 国产精品国产自产拍高清av王其| 欧美精品九九99久久| av不卡免费电影| 麻豆国产欧美一区二区三区| 亚洲欧美日韩小说| 久久综合精品国产一区二区三区| 在线免费观看一区| 国产最新精品免费| 亚洲图片有声小说| 国产精品久久国产精麻豆99网站| 欧美一区二区免费| 在线观看亚洲精品视频| 国产成人免费在线观看| 三级久久三级久久| 夜夜揉揉日日人人青青一国产精品| 精品国产乱子伦一区| 欧美日韩在线精品一区二区三区激情| 成人精品视频.| 国内精品伊人久久久久影院对白| 亚洲成av人影院在线观看网| 中文字幕在线观看一区| 久久精品亚洲精品国产欧美kt∨ | 日本成人中文字幕在线视频| 亚洲免费观看高清在线观看| 久久久久久久久久久久久女国产乱| 欧美欧美欧美欧美| 欧美三级电影在线观看| 91原创在线视频| 成人av网址在线| 国产成人精品免费| 国产精品综合av一区二区国产馆| 日本欧美肥老太交大片| 视频一区中文字幕国产| 亚洲综合男人的天堂| 中文字幕一区二区三区色视频| 日本一区二区综合亚洲| 精品久久人人做人人爱| 日韩一区二区三区视频在线观看| 欧美午夜精品免费| 欧美亚洲高清一区| 欧洲生活片亚洲生活在线观看| 91久久人澡人人添人人爽欧美|