我有一个与内存泄漏有关的查询。
基于32位Linux的系统正在运行多个活动进程A,B,C,D。所有进程都从堆中分配/释放内存。现在,如果进程A正在大量泄漏大量内存,那么在一段时间之后,进程B无法找到从堆中分配的任何内存会发生吗?
根据我的理解,每个进程都提供了一个来自操作系统的2GB的unque VM。但是VM和物理内存之间存在着一种混搭。
答案 0 :(得分:2)
是的,如果进程A耗尽了VM(RAM +交换空间)的总量,那么任何其他进程中的malloc
都可能因此而失败。 Linux隐藏了进程的其他进程的内存空间,但它并没有神奇地在你的机器中创建额外的内存。 (虽然由于overcommit行为,它似乎可能会这样做。)
此外,当内存不足时,Linux可能会使用其OOM杀手。
答案 1 :(得分:0)
Linux内核默认执行内存过量使用。 当进程使用malloc()请求内存段时,不会自动分配内存。 你可能有4个进程malloc()每个2gb并没有任何问题。 当进程使用malloc()ed内存时,会出现问题(initialize,bzero,copy)。 你甚至可以为系统提供更多的内存,而不会有任何问题,而malloc()甚至不会返回NULL !!