【发布时间】:2018-06-23 22:03:07
【问题描述】:
出于某种原因,我需要知道某个变量的物理地址。尽管如此,初始化变量后物理地址会发生变化。为了获得物理地址,我使用this function (virt_to_phys(..., uint64_t virtaddr)),它似乎工作正常。一些行为示例:
初始化前:virtual 0x5632692a3780 physical 0x32b2c7c780
初始化后:virtual 0x5632692a3780 physical 0x342147a780
使用这些格式化程序:
printf("virtual 0x%llx physical 0x%llx\n", &p, virt_to_phys((uint64_t) &p));
我正在使用-O2 进行编译,但我也使用了-O0 并且没有任何改变,所以我猜这种行为不是优化。我也在内核 4.13.4-1 的 Arch Linux 中执行此代码。
这可能是一个愚蠢的问题,但我无法理解这种行为背后的原因。
【问题讨论】:
-
物理地址在内核之外没有意义。你在写内核代码吗?
-
@n.m.是的,我猜到了
标签: c linux memory heap-memory