Memory zsh';s对程序内存泄漏的反应
我正在试验内存泄漏。当我从zsh运行以下程序时,它会启动并在一段时间后终止。zsh在做吗?谁决定什么时候杀它Memory zsh';s对程序内存泄漏的反应,memory,memory-management,operating-system,zsh,Memory,Memory Management,Operating System,Zsh,我正在试验内存泄漏。当我从zsh运行以下程序时,它会启动并在一段时间后终止。zsh在做吗?谁决定什么时候杀它 #包括 #包括 int main(){ int*a=(int*)malloc(sizeof(int)); *a=5; std::cout这取决于您如何运行它,但通常是操作系统在malloc返回NULL(如果无法分配新内存)并尝试写入值(5)后终止您的进程所以基本上是一个NULL指针解引用,你的代码试图访问地址NULL的内存 从哲学上讲,是程序员决定编写错误代码并使其程序崩溃。:-) 编辑
#包括
#包括
int main(){
int*a=(int*)malloc(sizeof(int));
*a=5;
std::cout这取决于您如何运行它,但通常是操作系统在malloc
返回NULL
(如果无法分配新内存)并尝试写入值(5
)后终止您的进程所以基本上是一个NULL
指针解引用,你的代码试图访问地址NULL
的内存
从哲学上讲,是程序员决定编写错误代码并使其程序崩溃。:-)
编辑:另一方面,这可能仍然是操作系统(或其程序员)的错误如果它试图向您的进程过度分配内存。例如,默认情况下,Linux中启用了内存过度分配。这意味着即使操作系统没有可用内存,它也要依赖于进程,让内存分配方法成功,并在进程首次访问时实际尝试分配内存。这可能会导致一些情况当malloc
成功并返回非NULL
值时,稍后当进程尝试访问该内存时,操作系统将尝试分配该内存。如果操作系统失败,则必须阻止/暂停该进程或将其杀死。Linux通常运行其臭名昭著的OOM killer,当内存分配失败时选择要杀死的进程。并且通常,要终止的进程是分配大量内存的进程,即您的进程