malloc 在执行读修改之前不会分配物理内存

问题描述 投票:0回答:1

为什么如果我尝试仅使用 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;
}
c linux gcc malloc ram
1个回答
0
投票
ptr[i] = 1;

您不使用它,因此编译器正在对其进行优化。没有写操作。

char *ptr
更改为
volatile char *ptr
,编译器不会对其进行优化。

© www.soinside.com 2019 - 2024. All rights reserved.