WEB开发网
开发学院数据库MySQL MySQL内核:innodb动态数组内部实现 阅读

MySQL内核:innodb动态数组内部实现

 2008-12-03 11:15:15 来源:WEB开发网   
核心提示: 下面一个问题是,既然heap在起初的设置为NULL,MySQL内核:innodb动态数组内部实现(3),那么什么时候分配给它值?是第一次分配block成员的时候?还是每次分配block成员的时候?我们这里暂不分析如何插入,我们先看看,好,那我们通过图形来看下,当dyn数组已经数据不够用的时

下面一个问题是,既然heap在起初的设置为NULL,那么什么时候分配给它值?是第一次分配block成员的时候?还是每次分配block成员的时候?

我们这里暂不分析如何插入,我们先看看,当dyn数组已经数据不够用的时候,我们怎么给这个arr增加一个新的block。代码如下:

  dyn_block_t*
dyn_array_add_block(
/*================*/
  /* out: created block */
dyn_array_t*arr)/* in: dyn array */
{
mem_heap_t*heap;
dyn_block_t*block;
  ut_ad(arr);
ut_ad(arr->magic_n == DYN_BLOCK_MAGIC_N);
  if (arr->heap == NULL) {
 UT_LIST_INIT(arr->base);
 UT_LIST_ADD_FIRST(list, arr->base, arr);
  arr->heap = mem_heap_create(sizeof(dyn_block_t));
}
  block = dyn_array_get_last_block(arr);
block->used = block->used | DYN_BLOCK_FULL_FLAG;
  heap = arr->heap;
  block = mem_heap_alloc(heap, sizeof(dyn_block_t));
  block->used = 0;
  UT_LIST_ADD_LAST(list, arr->base, block);
  return(block);
}

代码中,我们可以看出,第一次增加block的时候,因为“arr->heap == NULL”条件为真,就会创建一个heap堆,在以后的再增加block时,就会使用的该堆直接分配。所以,我们可以得知,对于dyn动态数组,只有首节点的heap才是有效的。

好,那我们通过图形来看下,增加新节点之后的图形变化。

MySQL内核:innodb动态数组内部实现

上一页  1 2 3 4 5 6 7 8  下一页

Tags:MySQL 内核 innodb

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接