c++ - Visual C++ GC 接口(interface)如何启用它以及要包含哪个库

标签 c++ c++11 visual-c++ garbage-collection

我开始学习 C++ 中的 GC 接口(interface),并在 Visual 2019 C++ 中运行了几个网络上可用的示例以实现以下功能:

上面的每个引用都有一个示例代码,在我的 VC++ 2019 中编译并成功执行

我想知道 VS2019 是否默认启用了 GC - 我的意思是我们不需要启用某些编译器开关或库来添加链接。

此外,如果 GC 默认启用,那么为什么我们没有“set_pointer_safety”而是“get_pointer_safety”? ' 只有?

那么我们如何使用 VC++ 中的 GC 功能,例如内存因 GC 而被释放?

最佳答案

I started learning GC interface in C++

你读过 C++11 标准了吗 n3337

Visual C++ GC Interface How to enable it and which library to include

正如其他人所解释的,Visual C++ 中没有真正的 GC

写一个简单 garbage collector相当容易。

刚刚阅读the GC handbook指导,和/或 Dragon Book , 和/或 Lisp In Small Pieces或者这个 Uniprocessor Garbage Collection Techniques纸。

请注意,您的 GC 的 C++ 垃圾收集标记或复制例程可以通过类似于 SWIG 的工具生成本着 s11n 的精神图书馆。

如果您的代码库很小(几万行 C++ 行和几十个 C++ class-es),您甚至可以生成 GC 支持例程你自己的元程序(或使用 GPP 预处理器或 GNU m4 一个或 GNU gawk )。如果您可以并且被允许使用最近的 GCC 编译您的 C++ 代码(例如 2020 年 7 月的 GCC 10),考虑写下您的 GCC plugin生成支持垃圾回收的 C++ 代码。另请参阅[本草案][9] 报告及其中的引用资料。公告the garbage collector 里面 GCC .

您可能会对 Boehm's conservative GC 感兴趣图书馆,或通过 Frama-C ,或通过 Clang static analyzer .

但是编写最先进的高性能 GC 需要付出很多努力,尤其是当您的 C++ 程序是多线程时。

附言。在两个githubgitlab在其他地方,您会发现垃圾收集语言的 C 或 C++ 开源实现,例如this (或 GNU guilePythonGHCOcaml )。我建议研究他们的 C++ 或 C 源代码以获取灵感。和 GCC内部有它的 own garbage collector (另请参阅我以前未维护的 GCC MELT 项目和我写的几张幻灯片)。

关于c++ - Visual C++ GC 接口(interface)如何启用它以及要包含哪个库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62845185/

相关文章:

c++ - 使用 C++ 的 std::move 从内部范围内的对象到外部范围安全吗?

c++ - 我们可以通过哪些不同的方式动态链接 DLL

c# - P/Invoke c# 和 native c++

C++ 将赋值移动到未初始化的对象?

c++ - 在 C++ 中声明 using 的位置是否有好的做法?

c++ - Clang 3.1 和 C++11 支持状态

c++ - Eclipse CDT 自动完成功能不起作用

c++ - iOS - 隐式转换丢失整数精度 'size_t'(又名 'unsigned long')到 'int'

c++ - 与现代 C++ 相比,现代 Fortran 有哪些优势?

c++ - 计算新行、制表符和空格