函数lock_rec_set_nth_bit

 

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; }

 

你可能感兴趣的:(函数lock_rec_set_nth_bit)