为什么如果我尝试仅使用 wirte 使页面变脏,Linux 不会分配物理 RAM,但如果我进行读写,Linux 会分配物理 RAM?
获取了 linux 5.4 和 aarch64 的一些代码。编译器是gcc 6.3.1
int main(int argc, char *argv[])
{
long size;
long size_bytes;
char *ptr;
size = strtol(argv[1], NULL, 0);
size_bytes = size * 1024 * 1024;
ptr = malloc(size_bytes);
if (!ptr)
goto exit;
// Make memory dirty so it is allocated in real RAM
for (int i = 0; i < size_bytes; i += sysconf(_SC_PAGESIZE))
ptr[i] += 1; // works ok
//ptr[i] = 1; // does not allocates physical RAM
while(1)
sleep(1);
exit:
free(ptr);
return 0;
}
ptr[i] = 1;
您不使用它,因此编译器正在对其进行优化。没有写操作。
将
char *ptr
更改为 volatile char *ptr
,编译器不会对其进行优化。