【发布时间】:2015-06-02 15:19:13
【问题描述】:
我在我的 Linux 用户空间应用程序中分配了一些内存。但是,这个内存还没有物理内存支持。
为了使页面被映射,我尝试读取该区域中的每个页面,如下所示。但它并不总是对我有用。
这是我的原始代码:
void Function(void)
{
char *memory;
memory = malloc(4096 * 10);
}
这样分配,虚拟内存还没有映射到物理内存。
所以我修改了代码:
void Function(void)
{
char *memory;
volatile uint *accessMemory;
memory = malloc(4096 * 10);
accessMemory = (volatile uint *)memory;
for (i = 0; i < 4096 / 10; i++) {
printf("%X\n", *accessMemory);
accessMemory = (volatile uint *)((uint)accessMemory + 4096);
}
}
但我还是遇到了同样的问题。我做错了什么?
【问题讨论】:
-
究竟是什么错误?
-
对不起,这不是错误,但我在 arm 处理器中应用了安全扩展。有时我需要 linux 页表来映射到同一物理地址的页表。但是linux使用page-fault mechnisim所以没有将物理地址映射到页表,所以我不读取这个物理地址。在linux系统中,这不是Bug。但我的情况是这种情况造成了一个错误
标签: c linux memory memory-management