我知道,如果我试图打印一个数组元素的地址,它将是一个来自虚拟内存的地址,而不是来自真实内存(物理内存),即DRAM的地址。
printf ("Address of A[5] and A[6] are %u and %u", &A[5], &A[6]);
我发现地址是连续的(假设元素是字符)。实际上,它们可能不是连续的,至少在DRAM中不是。我想知道真正的地址。我该怎么做呢?
无论是Windows还是Linux,我都需要知道这一点。
我需要在linux驱动程序中获得分配内存块的物理内存:这是一个FPGA SOC,内存被传递给SGDMA FPGA模块。
这可以归结为对“逻辑”和“虚拟”记忆的混淆:--它们是同义词还是反义?--
因此,我的驱动程序代码片段是:
unsigned long m = __get_free_pages(GFP_USER, order); // returns 'logical' address
if (m) {
instance->read_buffer[i].order = order;
if(1) { // should this be 0?