Javascript 什么是';内存泄漏'?这是性能问题还是安全问题?

Javascript 什么是';内存泄漏'?这是性能问题还是安全问题?,javascript,memory,memory-leaks,Javascript,Memory,Memory Leaks,我当时正在经历内存泄漏,但由于幻灯片的原因,我无法理解。有人能告诉我什么是内存泄漏的例子吗?这是性能问题还是安全问题?正如 在计算机科学中,当计算机程序运行时会发生内存泄漏 错误地管理内存分配。在面向对象技术中 编程时,当对象存储在内存中时,可能会发生内存泄漏 内存,但运行的代码无法访问。内存泄漏 症状与许多其他问题类似(见下文),并且 通常只能由具有访问权限的程序员进行诊断 节目 堆栈溢出显示 当程序无法释放已分配但不再使用的内存时,就会发生内存泄漏 根据您的问题,如果是安全问题或性能问题,我

我当时正在经历内存泄漏,但由于幻灯片的原因,我无法理解。有人能告诉我什么是内存泄漏的例子吗?这是性能问题还是安全问题?

正如

在计算机科学中,当计算机程序运行时会发生内存泄漏 错误地管理内存分配。在面向对象技术中 编程时,当对象存储在内存中时,可能会发生内存泄漏 内存,但运行的代码无法访问。内存泄漏 症状与许多其他问题类似(见下文),并且 通常只能由具有访问权限的程序员进行诊断 节目

堆栈溢出显示

当程序无法释放已分配但不再使用的内存时,就会发生内存泄漏

根据您的问题,如果是安全问题或性能问题,我会说两者,因为一旦发生内存泄漏,在大多数情况下,程序将无法继续运行,并被迫停止

根据显示,程序中发生内存泄漏

可能很快导致系统无法为其他程序(甚至自身)分配内存,从而导致性能低下和意外故障。在一些不太现代的环境中,内存泄漏可能导致系统意外崩溃,从而导致其他问题

正如《圣经》所说

在计算机科学中,当计算机程序运行时会发生内存泄漏 错误地管理内存分配。在面向对象技术中 编程时,当对象存储在内存中时,可能会发生内存泄漏 内存,但运行的代码无法访问。内存泄漏 症状与许多其他问题类似(见下文),并且 通常只能由具有访问权限的程序员进行诊断 节目

堆栈溢出显示

当程序无法释放已分配但不再使用的内存时,就会发生内存泄漏

根据您的问题,如果是安全问题或性能问题,我会说两者,因为一旦发生内存泄漏,在大多数情况下,程序将无法继续运行,并被迫停止

根据显示,程序中发生内存泄漏

可能很快导致系统无法为其他程序(甚至自身)分配内存,从而导致性能低下和意外故障。在一些不太现代的环境中,内存泄漏可能导致系统意外崩溃,从而导致其他问题


在较旧的软件中,所有东西都是固定大小的,比如字符串缓冲区等。几乎没有内存泄漏,但能力有限

现在大多数现代软件都在分配内存。你为一个字符串、一个文件或任何东西请求一块或一大块内存,当你处理完后,你会把它还给(通常是给操作系统或给你打电话的人)。例如,假设您需要吸入一个文件进行处理,您或您的函数会计算出需要多少空间,并对这么大的块发出请求。或者,如果您只是想通过将另外两个字符串连接在一起(如$new='old'+'er'来创建一个字符串),那么这将为$new字符串分配一小块内存

因此,回到当你完成记忆的时候把它还给你的问题上来。例如,较新版本的php具有所谓的引用计数器,它允许软件返回内存,即使您忘记了

但我在一些(现在大部分是较旧的)软件中看到的情况是,如果遇到错误,并执行陷阱以从错误中恢复,代码中可能会出现错误,忘记返回通常会返回的内存,这将创建所谓的内存泄漏,或分配的内存,但不能重复使用,因此随着泄漏的再次发生,尺寸逐渐增大

在较低级别的代码中,此泄漏可能会导致程序自毁或其他人关闭,从而导致崩溃

内存泄漏会在看似与错误实际发生时间无关的奇怪时间导致奇怪错误。就像你可能有一个程序运行了一周,每天都在做同样的事情,突然它失败了


所以,如果健壮性就是性能,那么内存泄漏就是性能问题。如果它可能导致软件崩溃,则可能是一个安全问题。我有一个朋友几年前闯入了大学的主服务器,因为他发现了一个会崩溃并提供机会窗口的程序。

在旧软件中,一切都是固定大小的,如字符串缓冲区等。几乎没有内存泄漏,但能力有限

现在大多数现代软件都在分配内存。你为一个字符串、一个文件或任何东西请求一块或一大块内存,当你处理完后,你会把它还给(通常是给操作系统或给你打电话的人)。例如,假设您需要吸入一个文件进行处理,您或您的函数会计算出需要多少空间,并对这么大的块发出请求。或者,如果您只是想通过将另外两个字符串连接在一起(如$new='old'+'er'来创建一个字符串),那么这将为$new字符串分配一小块内存

因此,回到当你完成记忆的时候把它还给你的问题上来。例如,较新版本的php具有所谓的引用计数器,它允许软件返回内存,即使您忘记了

但我在一些(现在大部分是较旧的)软件中看到的情况是,如果遇到错误,并且执行了陷阱以从错误中恢复,代码中可能会出现错误,忘记返回通常会返回的内存,这将导致所谓的内存泄漏,o
int main()
{
    int strLength = 10;
    // Lets ask for some memory for a string
    char *str = (char *)malloc(sizeof(char));
    for (int i=0; i<strLength; i++)
    {
         str[i] = 'a' + i;
    }
    str[strLength-1] = 0;
    // This should print "abcdefghi"
    printf(str);
    // We should run this to free memory: free(str);
    return 0;
}