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

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

?? memory_chunks.c

?? http://gaul.sourceforge.net/ 這里大部分人討論的是在Matlab里實現GA的toolbox.以上為一個GA的C語言的軟件包.如果你想利用GA做優化算法,非常有用.而且有
?? C
?? 第 1 頁 / 共 3 頁
字號:
    }  if (node->balance > 1) return node_balance(node);  return node;  }static node_t *node_restore_right_balance(node_t	*node,				   int		old_balance)  {  if ( (!node->right) || ((node->right->balance != old_balance) &&	   (node->right->balance == 0)) )    {    node->balance--;    }  if (node->balance < -1) return node_balance(node);  return node;  }static int node_height(node_t *node)  {  int left_height;  int right_height;  if (!node) return 0;  if (node->left)    left_height = node_height(node->left);  else    left_height = 0;  if (node->right)    right_height = node_height(node->right);  else    right_height = 0;  return MAX(left_height, right_height) + 1;  }static node_t *node_rotate_left(node_t *node)  {  node_t *right;  int a_bal;  int b_bal;  right = node->right;  node->right = right->left;  right->left = node;  a_bal = node->balance;  b_bal = right->balance;  if (b_bal <= 0)    {    if (a_bal >= 1) right->balance = b_bal - 1;    else right->balance = a_bal + b_bal - 2;    node->balance = a_bal - 1;    }  else    {    if (a_bal <= b_bal) right->balance = a_bal - 2;    else right->balance = b_bal - 1;    node->balance = a_bal - b_bal - 1;    }  return right;  }static node_t *node_rotate_right(node_t *node)  {  node_t *left;  int a_bal;  int b_bal;  left = node->left;  node->left = left->right;  left->right = node;  a_bal = node->balance;  b_bal = left->balance;  if (b_bal <= 0)    {    if (b_bal > a_bal) left->balance = b_bal + 1;    else left->balance = a_bal + 2;    node->balance = a_bal - b_bal + 1;    }  else    {    if (a_bal <= -1) left->balance = b_bal + 1;    else left->balance = a_bal + b_bal + 2;    node->balance = a_bal + 1;    }  return left;  }static tree_t *tree_new(void)  {  tree_t *tree;  num_trees++;  if (!(tree = malloc(sizeof(tree_t))) )    die("Unable to allocate memory.");  tree->root = NULL;  return tree;  }static void delete(tree_t *tree)  {  if (!tree) return;  node_delete(tree->root);  s_free(tree);  num_trees--;  THREAD_LOCK(node_buffer_lock);  if (num_trees == 0)    _destroy_buffers();  THREAD_UNLOCK(node_buffer_lock);  return;  }static boolean insert(tree_t *tree, void *data)  {  boolean	inserted=FALSE;  if (!data) die("Internal error: Trying to insert NULL data.");  if (!tree) die("Internal error: Trying to insert into NULL tree.");  tree->root = node_insert(tree->root, (Key_t) ((MemArea *)data)->mem, data, &inserted);  return inserted;  }static void *remove_data(tree_t *tree, void *data)  {  void *removed=NULL;  if (!tree || !tree->root) return NULL;  tree->root = node_remove(tree->root, (Key_t) ((MemArea *)data)->mem, &removed);  return removed;  }static void *remove_key(tree_t *tree, Key_t key)  {  void *removed=NULL;  if (!tree || !tree->root) return NULL;  tree->root = node_remove(tree->root, key, &removed);  return removed;  }static void *ordered_search(tree_t *tree, void *userdata)  {  if (!tree || !tree->root) return NULL;  return node_ordered_search(tree->root, userdata);  }/* * Padding functions: */#if MEMORY_PADDING==TRUEstatic unsigned char *pad_values="abcdefghijklmnopqr";#define BUMP_DOWN(X)	( (void *) (((unsigned char *)(X))-MEMORY_ALIGN_SIZE) )#define BUMP_UP(X)	( (void *) (((unsigned char *)(X))+MEMORY_ALIGN_SIZE) )static void set_pad_low(MemChunk *mem_chunk, void *mem)  {  memcpy(((unsigned char *)mem),pad_values,MEMORY_ALIGN_SIZE);  return;  }static void set_pad_high(MemChunk *mem_chunk, void *mem)  {  memcpy(((unsigned char *)mem)+mem_chunk->atom_size-MEMORY_ALIGN_SIZE,            pad_values,MEMORY_ALIGN_SIZE);  return;  }static int check_pad_low(MemChunk *mem_chunk, void *mem)  {  return memcmp(((unsigned char *)mem),pad_values,MEMORY_ALIGN_SIZE);  }static int check_pad_high(MemChunk *mem_chunk, void *mem)  {  return memcmp(((unsigned char *)mem)+mem_chunk->atom_size-MEMORY_ALIGN_SIZE,                   pad_values,MEMORY_ALIGN_SIZE);  }#endif	/* MEMORY_PADDING==TRUE */boolean mem_chunk_has_freeable_atoms_real(MemChunk *mem_chunk)  {  return mem_chunk->mem_tree?TRUE:FALSE;  }static MemChunk *_mem_chunk_new(size_t atom_size, unsigned int num_atoms)  {  MemChunk	*mem_chunk;/* * Ensure that we don't misalign allocated memory for the user. * This also ensures that the minimum atom_size is okay for the * FreeAtom list. */  if (atom_size % MEMORY_ALIGN_SIZE > 0)    {    atom_size += MEMORY_ALIGN_SIZE - (atom_size % MEMORY_ALIGN_SIZE);    printf("DEBUG: modified MemChunk atom size.\n");    }#if MEMORY_PADDING==TRUE  atom_size += 2*MEMORY_ALIGN_SIZE;#endif  if ( !(mem_chunk = (MemChunk *) malloc(sizeof(MemChunk))) )    die("Unable to allocate memory.");  mem_chunk->num_mem_areas = 0;  mem_chunk->num_unused_areas = 0;  mem_chunk->mem_area = NULL;  mem_chunk->free_mem_area = NULL;  mem_chunk->free_atoms = NULL;  mem_chunk->mem_areas = NULL;  mem_chunk->atom_size = atom_size;  mem_chunk->area_size = atom_size*num_atoms;  mem_chunk->mem_tree = NULL;    return mem_chunk;  }/* * Return TRUE is the memory chunk is empty. */boolean mem_chunk_isempty_real(MemChunk *mem_chunk)  {  if (!mem_chunk) die("Null pointer to mem_chunk passed.");  return mem_chunk->num_mem_areas==mem_chunk->num_unused_areas;  }/* * Constricted memory chunks: Atoms may not be individually released. */MemChunk *mem_chunk_new_unfreeable_real(size_t atom_size, unsigned int num_atoms)  {  MemChunk	*mem_chunk;  if (atom_size<1) die("Passed atom size is < 1 byte.");  if (num_atoms<1) die("Passed number of atoms is < 1.");  mem_chunk = _mem_chunk_new(atom_size, num_atoms);  return mem_chunk;  }MemChunk *mem_chunk_new_real(size_t atom_size, unsigned int num_atoms)  {  MemChunk	*mem_chunk;  if (atom_size<1) die("Passed atom size is < 1 byte.");  if (num_atoms<1) die("Passed number of atoms is < 1.");  mem_chunk = _mem_chunk_new(atom_size, num_atoms);  mem_chunk->mem_tree = tree_new();    return mem_chunk;  }void mem_chunk_destroy_real(MemChunk *mem_chunk)  {  MemArea *mem_areas;  MemArea *temp_area;  if (!mem_chunk) die("Null pointer to mem_chunk passed.");  mem_areas = mem_chunk->mem_areas;  while (mem_areas)    {    temp_area = mem_areas;    mem_areas = mem_areas->next;    free(temp_area);    }    delete(mem_chunk->mem_tree);    free(mem_chunk);  return;  }void *mem_chunk_alloc_real(MemChunk *mem_chunk)  {  MemArea *temp_area;  void *mem;  if (!mem_chunk) die("Null pointer to mem_chunk passed.");  while (mem_chunk->free_atoms)    {      /* Get the first piece of memory on the "free_atoms" list.       * We can go ahead and destroy the list node we used to keep       *  track of it with and to update the "free_atoms" list to       *  point to its next element.       */      mem = mem_chunk->free_atoms;      mem_chunk->free_atoms = mem_chunk->free_atoms->next;      /* Determine which area this piece of memory is allocated from */      temp_area = ordered_search(mem_chunk->mem_tree, mem);      /* If the area is unused, then it may be destroyed.       * We check to see if all of the segments on the free list that       *  reference this area have been removed. This occurs when       *  the ammount of free memory is less than the allocatable size.       * If the chunk should be freed, then we place it in the "free_mem_area".       * This is so we make sure not to free the memory area here and then       *  allocate it again a few lines down.       * If we don't allocate a chunk a few lines down then the "free_mem_area"       *  will be freed.       * If there is already a "free_mem_area" then we'll just free this memory area.       */      if (temp_area->used==0)        {          /* Update the "free" memory available in that area */          temp_area->free += mem_chunk->atom_size;          if (temp_area->free == mem_chunk->area_size)            {              if (temp_area == mem_chunk->mem_area)                mem_chunk->mem_area = NULL;              if (mem_chunk->free_mem_area)                {                mem_chunk->num_mem_areas--;                  if (temp_area->next)                    temp_area->next->prev = temp_area->prev;                  if (temp_area->prev)                    temp_area->prev->next = temp_area->next;                  if (temp_area == mem_chunk->mem_areas)                    mem_chunk->mem_areas = mem_chunk->mem_areas->next;                  if (mem_chunk->mem_tree)                    {                    if (!remove_data(mem_chunk->mem_tree, temp_area)) die("Unable to find temp_area.");                    }                  free (temp_area);                }              else                mem_chunk->free_mem_area = temp_area;              mem_chunk->num_unused_areas--;            }        }      else        {          /* Update the number of allocated atoms count.           */          temp_area->used++;          /* The area is still in use...return the memory           */#if MEMORY_PADDING==TRUE  set_pad_low(mem_chunk, mem);  set_pad_high(mem_chunk, mem);/*  if (check_pad_low(mem_chunk, mem)!=0) die("LOW MEMORY_PADDING ALREADY CORRUPT!");  if (check_pad_high(mem_chunk, mem)!=0) die("HIGH MEMORY_PADDING ALREADY CORRUPT!");*/  mem = BUMP_UP(mem);#endif        return mem;        }    }  /* If there isn't a current memory area or the current memory area is out of   * space then allocate a new memory area. We'll first check and see if we can   * use the "free_mem_area".  Otherwise we'll just malloc the memory area.   */  if ((!mem_chunk->mem_area) ||      ((mem_chunk->mem_area->index + mem_chunk->atom_size) > mem_chunk->area_size))    {      if (mem_chunk->free_mem_area)        {          mem_chunk->mem_area = mem_chunk->free_mem_area;          mem_chunk->free_mem_area = NULL;        }      else        {          mem_chunk->mem_area = (MemArea*) malloc(sizeof(MemArea)+                                                  MEMORY_ALIGN_SIZE-(sizeof(MemArea)%MEMORY_ALIGN_SIZE)+                                                  mem_chunk->area_size);          mem_chunk->mem_area->mem = ((unsigned char*) (mem_chunk->mem_area)+                                     sizeof(MemArea)+                                     MEMORY_ALIGN_SIZE-                                     (sizeof(MemArea)%MEMORY_ALIGN_SIZE));          if (!mem_chunk->mem_area) die("Unable to allocate memory.");          mem_chunk->num_mem_areas++;          mem_chunk->mem_area->next = mem_chunk->mem_areas;          mem_chunk->mem_area->prev = NULL;          if (mem_chunk->mem_areas)            mem_chunk->mem_areas->prev = mem_chunk->mem_area;          mem_chunk->mem_areas = mem_chunk->mem_area;          if (mem_chunk->mem_tree)            insert(mem_chunk->mem_tree, mem_chunk->mem_area);        }      mem_chunk->mem_area->index = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩精品专区| 亚洲精品ww久久久久久p站| 国产精品久久久久久户外露出| 亚洲免费大片在线观看| 国产一区二区三区四| 欧美亚洲一区二区在线| 欧美极品少妇xxxxⅹ高跟鞋| 天天亚洲美女在线视频| 成人污视频在线观看| 日韩欧美中文一区二区| 亚洲午夜三级在线| 成人激情小说网站| 久久久久综合网| 理论电影国产精品| 欧美日高清视频| 亚洲在线视频网站| 91网上在线视频| 国产精品久久综合| 国产精品小仙女| 亚洲精品一区二区三区福利| 免费高清不卡av| 91精品国产色综合久久不卡电影| 伊人开心综合网| 色欧美乱欧美15图片| 中文字幕日韩一区| 9色porny自拍视频一区二区| 国产日韩在线不卡| 国产精品中文欧美| 久久青草欧美一区二区三区| 韩国女主播成人在线观看| 日韩精品中文字幕在线一区| 人人狠狠综合久久亚洲| 欧美老人xxxx18| 免费在线观看视频一区| 日韩一区二区精品在线观看| 蜜臀久久99精品久久久久久9| 欧美日韩一区二区三区四区五区 | 国产亚洲精品aa午夜观看| 九九**精品视频免费播放| 欧美成人激情免费网| 狠狠色综合色综合网络| 亚洲精品在线免费观看视频| 国产馆精品极品| 国产精品三级电影| 91视频免费看| 亚洲国产一区视频| 欧美二区三区91| 精品一区二区三区免费毛片爱| 亚洲精品在线免费观看视频| 岛国一区二区在线观看| 专区另类欧美日韩| 欧美欧美午夜aⅴ在线观看| 日本午夜一本久久久综合| 久久久久久久性| 99久久精品99国产精品| 亚洲国产日韩a在线播放| 91精品国产免费久久综合| 久88久久88久久久| 日本一区二区三区国色天香| 一本久久a久久精品亚洲| 婷婷亚洲久悠悠色悠在线播放| xnxx国产精品| 一本一本久久a久久精品综合麻豆| 亚洲成人自拍偷拍| 久久精品网站免费观看| 欧美写真视频网站| 国产精品亚洲第一| 亚洲五月六月丁香激情| 久久久久88色偷偷免费| 欧美视频一区二区在线观看| 狠狠色丁香久久婷婷综合_中| 成人免费在线视频观看| 欧美一区二区三区影视| 99在线精品视频| 免费观看在线综合| 中文字幕一区二区三区四区| 欧美一区二区三区四区高清| 99精品国产99久久久久久白柏| 奇米在线7777在线精品| 亚洲欧洲国产日本综合| 精品久久久久久久久久久久久久久 | 欧美日韩综合一区| 久久99精品久久久久久| 亚洲图片欧美综合| 国产精品美女一区二区在线观看| 欧美日本免费一区二区三区| 成人动漫av在线| 免费在线成人网| 伊人婷婷欧美激情| 国产日韩三级在线| 日韩欧美国产一区在线观看| 色婷婷亚洲综合| 国产91对白在线观看九色| 日本网站在线观看一区二区三区 | 日本女优在线视频一区二区| 亚洲欧美视频一区| 中文一区在线播放| 久久婷婷综合激情| 欧美一级久久久| 7777精品伊人久久久大香线蕉最新版| 99精品欧美一区| 大桥未久av一区二区三区中文| 久久国产精品区| 免费国产亚洲视频| 日韩高清一级片| 午夜国产不卡在线观看视频| 亚洲欧洲无码一区二区三区| 国产精品久久一卡二卡| 欧美激情一区二区三区四区| 国产三级精品在线| 国产三级精品三级| 中文字幕成人在线观看| 欧美国产丝袜视频| 国产精品第一页第二页第三页| 国产欧美一区二区在线观看| 欧美国产综合色视频| 中文一区在线播放| 成人免费一区二区三区在线观看| 国产精品欧美极品| 国产精品美女久久久久久| 国产精品免费视频一区| 亚洲三级在线看| 亚洲黄色在线视频| 亚洲第一激情av| 蜜桃一区二区三区在线观看| 激情欧美一区二区| 丁香婷婷综合五月| 一本一道久久a久久精品综合蜜臀| 91黄色免费版| 欧美高清dvd| 久久先锋资源网| 欧美国产激情二区三区| 亚洲啪啪综合av一区二区三区| 亚洲小说春色综合另类电影| 五月激情综合网| 国产中文字幕一区| 99久久精品情趣| 欧美日韩另类一区| 精品国产髙清在线看国产毛片 | 日韩一区二区三| 欧美精品一区二区三区在线 | 国产免费成人在线视频| 久久综合国产精品| 国产精品福利电影一区二区三区四区| 欧美激情一区三区| 洋洋成人永久网站入口| 日本aⅴ免费视频一区二区三区| 国产一区二区三区不卡在线观看| 成人avav影音| 欧美日韩小视频| 日本一区二区不卡视频| 亚洲精品国产无天堂网2021 | 精品sm在线观看| 亚洲欧洲成人av每日更新| 亚洲1区2区3区4区| 国产福利一区二区三区视频 | 欧美国产日韩精品免费观看| 夜夜精品视频一区二区| 国内成+人亚洲+欧美+综合在线| 91在线观看污| 欧美一二区视频| 亚洲欧美视频在线观看视频| 精品在线播放午夜| 91在线播放网址| 精品三级在线观看| 亚洲电影在线播放| 国产成人综合在线| 欧美一区二区三区视频在线| 成人免费在线视频| 国产精品自拍三区| 69久久夜色精品国产69蝌蚪网| 国产精品免费丝袜| 六月婷婷色综合| 欧美精品三级日韩久久| 亚洲婷婷在线视频| 国产精品一区一区三区| 9191久久久久久久久久久| 亚洲人成精品久久久久久| 国产精品亚洲а∨天堂免在线| 日韩欧美中文字幕制服| 亚洲在线中文字幕| 91网站在线观看视频| 国产精品天美传媒沈樵| 国内精品第一页| 欧美r级电影在线观看| 亚洲一级二级在线| 色综合网站在线| 国产欧美一区二区在线| 国产伦精品一区二区三区在线观看 | 国产成人免费视频一区| 欧美一区二区三区喷汁尤物| 午夜精品一区二区三区免费视频| 色94色欧美sute亚洲13| 亚洲天堂成人在线观看| 97精品电影院| 国产精品久久久久久亚洲伦| 不卡一二三区首页| 中文字幕日韩一区| k8久久久一区二区三区 | 91麻豆精品国产91久久久使用方法|