草庐IT

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

这个问题类似于oneIrecentlyaskedaboutLLVM.V8在手动管理的堆上分配JavaScript对象,其内存最终是从mmap/VirtualAlloc(在Linux/Windows上)获得的。但是,对于其内部数据结构,V8usesC++standardcontainerssuchasstd::vector.如果这些容器需要分配内存但无法分配,它们通常会抛出std::bad_alloc。但是,V8iscompiledwith-fno-exceptions.如果不能使用异常,V8如何处理内部数据结构无法分配内存的情况?它会崩溃吗?如果是这样,这是否会取消任何嵌入V8的进程?

V8 的 JavaScript 标准库

在我的应用程序中,我允许用户使用JavaScript编写插件。为此,我嵌入了V8。问题是开发人员不能使用HTTP、套接字、流、定时器、线程、密码学、单元测试等。我搜索了StackOverflow并找到了node.js。它的问题是您实际上可以创建HTTP服务器,并启动进程和更多我不想允许的事情。另外,node.js有自己的环境(./nodescript.js),不能嵌入。而且它不支持Windows-我需要它是完全跨平台的。如果这些问题能够得到解决,那就太好了:)但我也对其他框架持开放态度。有什么想法吗?谢谢! 最佳答案 有Common

javascript - 如何使用 V8 从 C++ 访问和调用 Javascript 对象属性和方法?

我想要一个示例,说明如何使用v8引擎从C++访问和调用Javascript对象属性和方法。该文档展示了如何通过javascript而非其他方式访问C++对象和函数。这是一个简单的JS对象构造函数和实例:functionMyObj(){this.myArray=[];this.myDouble=0;this.myFunction=function(arg1,arg2){return(myDouble+arg1+arg2);}}varglobalObject=newmyObj();我如何访问globalObject的属性和方法?还有一个有点相关的问题——如何从C++填充数组(globalO

javascript - Cast vs ToXXX for v8 中的值句柄

我将V8作为辅助语言嵌入到C++程序中。我检索到Handle来自V8,当我调用类似的东西时Handlevalue_handle=context->Global()->Get(key_handle);然后我可以发现它是(比方说)一个带有value_handle->IsString()的字符串.如果是这样,我可以将其转换为Handle访问其特定于字符串的方法。但似乎有两种方法可以做到这一点:Handlestring=value_handle->ToString();或Handlestring=Handle::Cast(value_handle);但是,对于数组和函数,没有toArray()

c++ - 使用 Clang 构建 V8 并发出 LLVM IR

我正在尝试使用Clang构建V8Javascript引擎并输出.ll文件。我正在尝试合并信息here和here去做这个。但是,当我尝试make时,它失败了,显示“Noruletomaketarget”。我搞不清楚了。我试过只编译v8.cc,但完全失败了。我想这是因为我试图通过将它作为编译器放入来强制-emit-llvm,但我不确定。$cdv8$exportCXX="clang++-S-emit-llvm"$exportCC="clang-S-emit-llvm"$exportCPP="clang-E-S-emit-llvm"$exportLINK="clang++-S-emit-llv

c++ - V8 FunctionTemplate 类实例

我有以下类(class):classPluginManager{public:HandleRegister(constArguments&args);HandleGetObjectTemplate();};我希望可以从JavaScript访问Register方法。我像这样将它添加到全局对象中:PluginManagerpluginManagerInstance;global->Set(String::New("register"),FunctionTemplate::New(pluginManagerInstance.Register));它抛出以下错误:'PluginManager:

c++ - 如何填充 v8 数组?

我有一个vectorstd::vectorpath我想将它复制到v8array并从我的函数中返回它。我试过创建一个新数组v8::Handleresult;并把值从path进入result但没有运气。我还尝试了的几种变体returnscope.Close(v8::Array::New(/*I'vetriedmanythingsinhere*/));没有成功。This是一个类似的问题,但我似乎无法复制结果。如何填充v8数组? 最佳答案 这个例子直接来自Embedder'sGuide似乎非常接近您想要的-用新的String对象替换新的In

c++ - 是否有一个(Linux)g++相当于/fp :precise and/fp:fast flags used in Visual Studio?

背景:许多年前,我继承了一个代码库,该代码库使用VisualStudio(VC++)标志“/fp:fast”在特定的计算量大的库中生成更快的代码。不幸的是,'/fp:fast'产生的结果与不同编译器(BorlandC++)下的同一个库略有不同。因为我们需要产生完全相同的结果,所以我切换到“/fp:precise”,效果很好,从那以后一切都很顺利。但是,现在我在uBuntuLinux10.04上用g++编译同一个库,我看到了类似的行为,我想知道它是否有类似的根本原因。我的g++构建的数值结果与我的VC++构建的数值结果略有不同。这引出了我的问题:问题:g++是否具有与VC++中的“fp:

c++ - 使用具有缓存大小限制的 FILE_FLAG_RANDOM_ACCESS 访问文件

我想使用FILE_FLAG_RANDOM_ACCESS访问一个文件。但是当通过FILE_FLAG_RANDOM_ACCESS访问大文件时,巨大的内存消耗可能会导致系统性能下降。有没有办法限制特定文件句柄的缓存大小? 最佳答案 Windows不提供设置最大缓存大小的方法,但您自己实现起来相对容易。使用FILE_FLAG_NO_BUFFERING打开文件并使用LRU列表实现您自己的缓存以确定何时驱逐block。请注意,从WindowsServer2016开始,FILE_FLAG_RANDOM_ACCESS在缓存中保留数据的积极性降低,因

c# - 使用 FileStream 和 FILE_FLAG_NO_BUFFERING 读取文件

一些背景知识:我一直在尝试在对大文件进行IO时使用FILE_FLAG_NO_BUFFERING标志。我们正在尝试减少缓存管理器的负载,希望通过后台IO减少我们的应用程序对用户机器的影响。性能不是问题。尽可能多地躲在幕后是一个大问题。我有一个用于执行无缓冲IO的接近工作的包装器,但我遇到了一个奇怪的问题。当我使用不是4的倍数的偏移量调用Read时出现此错误。Handledoesnotsupportsynchronousoperations.TheparameterstotheFileStreamconstructormayneedtobechangedtoindicatethattheh