分层寻呼地址掩码
hierarchical paging address mask
我遇到了以下 C 代码,它旨在 运行 在 32 位机器上 并为页面目录地址和页面生成位掩码-table-2 层分页中的地址:
#define PAGE_DIRECTORY_ADDRESS_MASK (~((uint64_t)0xfff))
#define PAGE_TABLE_ADDRESS_MASK (~((uint32_t)0xfff))
两个 return 不会得到相同的结果吗?
20 bits 12 bits
+--------------+--------+
| 1...........1|0......0|
+--------------+--------+
32 12 11 0
好问题!它们可能看起来相同但是:
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#define PAGE_DIRECTORY_ADDRESS_MASK (~((uint64_t)0xfff))
#define PAGE_TABLE_ADDRESS_MASK (~((uint32_t)0xfff))
int main()
{
uint64_t a = PAGE_DIRECTORY_ADDRESS_MASK;
uint64_t b = PAGE_TABLE_ADDRESS_MASK;
if (PAGE_DIRECTORY_ADDRESS_MASK != PAGE_TABLE_ADDRESS_MASK)
printf("Different: %llx %llx\n",PAGE_DIRECTORY_ADDRESS_MASK, PAGE_TABLE_ADDRESS_MASK);
if (a != b)
printf("Different! %llx %llx\n",a, b);
return 0;
}
输出:
Different: fffffffffffff000 fffff000
Different! fffffffffffff000 fffff000
我遇到了以下 C 代码,它旨在 运行 在 32 位机器上 并为页面目录地址和页面生成位掩码-table-2 层分页中的地址:
#define PAGE_DIRECTORY_ADDRESS_MASK (~((uint64_t)0xfff))
#define PAGE_TABLE_ADDRESS_MASK (~((uint32_t)0xfff))
两个 return 不会得到相同的结果吗?
20 bits 12 bits
+--------------+--------+
| 1...........1|0......0|
+--------------+--------+
32 12 11 0
好问题!它们可能看起来相同但是:
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#define PAGE_DIRECTORY_ADDRESS_MASK (~((uint64_t)0xfff))
#define PAGE_TABLE_ADDRESS_MASK (~((uint32_t)0xfff))
int main()
{
uint64_t a = PAGE_DIRECTORY_ADDRESS_MASK;
uint64_t b = PAGE_TABLE_ADDRESS_MASK;
if (PAGE_DIRECTORY_ADDRESS_MASK != PAGE_TABLE_ADDRESS_MASK)
printf("Different: %llx %llx\n",PAGE_DIRECTORY_ADDRESS_MASK, PAGE_TABLE_ADDRESS_MASK);
if (a != b)
printf("Different! %llx %llx\n",a, b);
return 0;
}
输出:
Different: fffffffffffff000 fffff000
Different! fffffffffffff000 fffff000