以下代码将当前分页结构体在位图中对应的位清零,表示该页为可用页,memory_management_struct.bits_map表示位图数据结构的起始地址,
p->PHY_address是当前分页的物理地址,PAGE_2M_SHIFT是2MB分页的大小(2的多少次方),分页采用2MB分页。
请详细解释以下表达式的含义以及如何推导
*(memory_management_struct.bits_map + ((p->PHY_address >> PAGE_2M_SHIFT) >> 6)) ^= 1UL << (p->PHY_address >> PAGE_2M_SHIFT) % 64;
另外是否可以改成
*(memory_management_struct.bits_map + (p->PHY_address >> PAGE_2M_SHIFT) %64 )^= 1UL ;