gpt4 book ai didi

javascript - 如果无法分配内存,V8 会崩溃吗?这会使整个过程崩溃吗?

转载 作者:可可西里 更新时间:2023-11-01 17:55:50 26 4
gpt4 key购买 nike

这个问题类似于one I recently asked about LLVM .

V8 在手动管理的堆上分配 JavaScript 对象,其内存最终是从 mmap/VirtualAlloc(在 Linux/Windows 上)获得的。但是,对于其内部数据结构,V8 uses C++ standard containers such as std::vector .如果这些容器需要分配内存但无法分配,它们通常会抛出 std::bad_alloc

但是,V8 is compiled with -fno-exceptions .如果不能使用异常,V8如何处理内部数据结构无法分配内存的情况?它会崩溃吗?如果是这样,这是否会取消任何嵌入 V8 的进程?

最佳答案

通常,即使您的代码是使用 -fno-exceptions 编译的(那么 new 也不会抛出 std::bad_alloc 但它将返回 nullptr 而不是)标准 C++ 库 libstdc++ 编译时有异常然后 new 仍然会抛出 std::bad_alloc 当你用完时-内存。

说真的,当您内存不足时尽快崩溃(通常情况下)是您能做的最好的事情。如果您需要某种可靠性,那么拥有一个将重新启动您的应用程序的监控进程会容易得多。

V8 有什么作用?显然,它们重载了 new 运算符,当分配失败时(当然,malloc() 仍然返回 NULL)它们调用了一个特殊 函数来处理内存不足的情况。它会转储一些调试信息,报告此错误(您可能有自定义错误处理程序),然后(如果错误处理程序返回)调用 FATAL() 以退出应用程序。

api.cc on GitHub 浏览源代码.从代码中,简单地说:

When V8 cannot allocated memory FatalProcessOutOfMemory is called. The default OOM error handler is called and execution is stopped.

关于javascript - 如果无法分配内存,V8 会崩溃吗?这会使整个过程崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38711089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com