您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

mmap或malloc是否分配RAM?

mmap或malloc是否分配RAM?

这非常依赖于OS /计算机。

在大多数操作系统中,都不分配RAM。它们都分配VM空间。它们使一定范围的进程虚拟内存有效使用。通常,操作系统会在第一次写入时稍后分配RAM。在此之前,这些分配不会使用RAM(除了将它们列为有效VM空间的页表之外)。

如果要分配物理RAM,则必须使每个页面sysconf(_SC_PAGESIZE)使您的系统页面大小)变脏。

在Linux中,您可以在中查看包含所有详细信息的VM映射/proc/self/smapsRSS是该映射的驻留集(RAM中驻留了多少),其他所有脏的东西都将被交换掉。所有非脏内存将可供使用,但在那之前将不存在。

您可以使用以下方法使所有页面变脏

size_t mem_length;
char (*my_memory)[sysconf(_SC_PAGESIZE)] = mmap(
      NULL
    , mem_length
    , PROT_READ | PROT_WRITE
    , MAP_PRIVATE | MAP_ANONYMOUS
    , -1
    , 0
    );

int i;
for (i = 0; i * sizeof(*my_memory) < mem_length; i++) {
    my_memory[i][0] = 1;
}

在某些实现中,也可以通过将MAP_POPULATE标志传递给来实现mmap,但是(取决于您的系统)如果尝试映射更多内容而没有可用的RAMmmapENOMEM则可能会失败。

其他 2022/1/1 18:16:46 有406人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶