lock 分配内存
lock = mem_heap_alloc(trx->lock_heap, sizeof(lock_t) + n_bytes);
内存分配图
0xxx 2 | xxx |
0xxx3 | sizeof(lock_t) |
0xxx15 | n_bytes |
0xxx19 | xxx |
上面分配的内存是连续的,不会造成碎片
lock[0] 为 0xxx3
lock[1] 为 0xxx15 或 lock+sizeof(lock_t)
n_bytes 假设为5, 即5个字节,每个字节8位, 可以理解为 二维数组 5行8列
/**********************************************************************//**
Sets the nth bit of a record lock to TRUE. */
UNIV_INLINE
void
lock_rec_set_nth_bit(
/*=================*/
lock_t* lock, /*!< in: record lock */
ulint i) /*!< in: index of the bit */
{
ulint byte_index;
ulint bit_index;
ut_ad(lock);
ut_ad(lock_get_type_low(lock) == LOCK_REC);
ut_ad(i < lock->un_member.rec_lock.n_bits);
byte_index = i / 8;
bit_index = i % 8;
((byte*) &lock[1])[byte_index] |= 1 << bit_index;
}