【问题标题】:What become of the allocated pages after killing process without free page?在没有空闲页面的情况下杀死进程后分配的页面会变成什么?
【发布时间】:2013-11-28 10:01:30
【问题描述】:

全部。

假设进程'A通过如下代码分配大量页面。
并且进程'A会定期执行此代码,因此会发生内存泄漏。

 // allocates 1Mb
for(i=0;i<10;i++)
{
  page_p=alloc_pages(gfp_mask, 8);
}

顺便说一句,在没有空闲页面的情况下杀死进程后分配的页面会变成什么?
分配的页面永久泄漏?

【问题讨论】:

    标签: linux memory-management memory-leaks out-of-memory


    【解决方案1】:

    在 Linux 中,您有虚拟内存,它是每个进程的内存映射。进程内存是从这个映射中分配的,操作系统将这个内存映射到物理内存,RAM 或交换。

    当一个进程退出时,操作系统会删除进程的内存映射,另一个进程可以重用它。所以泄露的内存只有在进程运行时才会泄露。

    【讨论】:

    • 我认为,您关于泄漏内存仅在进程运行时泄漏的评论仅限于进程内存。上面的测试代码尝试从好友分配内存。在调用 free_pages 函数之前,分配的内存将作为泄漏内存保留。
    • 我认为,在上述测试代码的情况下,分配的页面将保持永久泄漏。
    • 如果您在内核空间中使用alloc_pages(如预期的那样),那么是的,您可以创建永久内存泄漏。但是你不能在用户空间中这样做,因为内存只能通过虚拟内存子系统分配。如果您在分配内核内存并将其传递给用户空间中的进程时正在做奇怪的事情,那么请停止。
    猜你喜欢
    • 2016-02-18
    • 2019-07-11
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2015-12-07
    相关资源
    最近更新 更多