为什么llvm :: Module存储在unique_ptr中?

时间:2017-12-27 06:25:20

标签: c++ llvm unique-ptr

LLVM Kaleidoscope教程中,我找到了以下代码:

glob()

我很困惑为什么这个存储在unique_ptr而不是常规的全局变量中。也许对象太大了,进行堆分配而不是堆栈会更有效率?毕竟,static std::unique_ptr<Module> TheModule; 在我的系统上是728。我可以根据推测得到具体的答案吗?感谢。

1 个答案:

答案 0 :(得分:2)

chapter 4 TheModule中便宜地移入JIT(AFAIK然后在代码生成后删除),然后使用新的Module重新初始化,这不适用于静态{{1变量。

Module

虽然可以编写JIT以将 auto H = TheJIT->addModule(std::move(TheModule)); InitializeModuleAndPassManager(); // here a new empty module is created 指针传递给Module,但之后不能用新模块替换静态IRCompileLayer变量。

教程说明了这一点:

  

将模块添加到JIT后,它就不再存在了   修改后,我们也打开一个新模块来保存后续代码   调用InitializeModuleAndPassManager()。

Module

如果TheModule是static void InitializeModuleAndPassManager() { // Open a new module. TheModule = llvm::make_unique<Module>("my cool jit", TheContext); 而不是Module,则此分配将失败。