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

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

 2008-12-03 11:15:15 来源:WEB开发网   
核心提示: 好,我们下面先看下分配空间的函数,MySQL内核:innodb动态数组内部实现(5),/*Makes room on top of a dyn array and returns a pointer to the added element.The caller must copy the

好,我们下面先看下分配空间的函数。

  /*************************************************************************
Makes room on top of a dyn array and returns a pointer to the added element.
The caller must copy the element to the pointer returned. */
UNIV_INLINE
void*
dyn_array_push(
/*===========*/
  /* out: pointer to the element */
dyn_array_t*arr,/* in: dynamic array */
ulint size)/* in: size in bytes of the element */
{
dyn_block_t*block;
ulint used;
  ut_ad(arr);
ut_ad(arr->magic_n == DYN_BLOCK_MAGIC_N);
ut_ad(size <= DYN_ARRAY_DATA_SIZE);
ut_ad(size);
block = arr;
used = block->used;
  if (used + size > DYN_ARRAY_DATA_SIZE) {
 /* Get the last array block */
 
 block = dyn_array_get_last_block(arr);
 used = block->used;
  if (used + size > DYN_ARRAY_DATA_SIZE) {
 block = dyn_array_add_block(arr);
 used = block->used;
 }
}
  block->used = used + size;
ut_ad(block->used <= DYN_ARRAY_DATA_SIZE);
  return((block->data) + used);
}

在这里面,我们要关注一下:

  block=arr;
  used=block->used;

首先得到arr的首节点,在前面的内容中,我们描述过,在只有一个节点的时候(参考图1),arr本身就是block,如果是多个节点,这个代码相当于获得的是链表的首节点。

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

Tags:MySQL 内核 innodb

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