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

 

原文地址:https://www.cnblogs.com/taek/p/4942654.html