问题标签 [boehm-gc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 是否可以仅将 Boehm 垃圾收集器用于程序的一部分?
我在 LinuxJournal 中阅读了有关Boehm-Demers-Weiser 垃圾收集器库的文章。我很有趣在我的库中使用它而不是我自己的引用计数实现。
我只有一个问题:是否可以仅将 gc 用于我的共享库并在主应用程序中仍然使用 malloc/free?我不太了解 gc 如何检查堆,所以我担心 gc 在这种情况下的性能以及可能的副作用。
c - 如何在 Boehm GC 中使用 asprintf?
据我所知, asprintf 调用 malloc。如果我用 Boehm GC 替换 malloc,对 asprintf 的调用仍然调用传统的 malloc - 至少这是 valgrind 告诉我的:
这是 malloc 宏:
这是 valgrind 报告:
这是 malloc 调用来自的代码:
一种解决方法可能是使用 asprintf,然后使用 malloc 复制它,以便使用 malloc 宏而不是原始函数:
这看起来很傻——它涉及到一堆不必要的复制,而且恰好是一个代码眼痛的 IHMO。那么有没有一种安全的方法来使用 asprintf 和其他可能调用本机 malloc 的系统库,同时仍然使用 Boehm GC?我应该使用 asprintf 的替代方法吗?
c - Boehm GC:如何有效调试损坏的堆对象?
运行我的程序时,我从 Boehm GC 收到以下错误(定义了 GC_DEBUG):
以上持续约20次。
奇怪的是,我找不到程序有什么问题,它做了它应该做的事情,并且没有崩溃。
我可以编译禁用 GC 的程序。然后我可以用它运行 valgrind,但奇怪的是,valgrind 没有发现任何问题!
这可能是 Boehm GC 中的一个问题——我应该忽略它吗?
有谁知道如何有效地调试这个?
或者,任何人都可以解释上述消息的确切含义吗?
garbage-collection - Boehm 和标记指针
标记指针是实现动态语言时的常见优化:利用对齐要求,即指针的低两位或三位始终为零,并使用它们来存储类型信息。
假设您正在使用 Boehm 垃圾收集器,它基本上通过查看活动数据来寻找看起来像指针的东西。标记指针看起来不像指针,因为它们的低位是非零的。
这是一个展示停止器,即如果您使用 Boehm,您是否必须放弃标记指针?或者它有办法解决这个问题吗?
c++ - Boehm GC++ 垃圾收集器:堆部分太多增加 MAXHINCR 或 MAX_HEAP_SECTS
我在应用程序中使用 Boehm C++ 垃圾收集器。该应用程序使用 Levenshtein Deterministic Finite Automata Python 程序来计算两个字符串之间的 Levenshtein 距离。我已使用 gcc 4.1.2 将 Python 程序移植到 Centos Linux 版本上的 C++。
最近,我注意到在我运行应用程序超过 10 分钟后,我收到了 SIGABRT 错误消息:Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS
. 我想知道是否有人知道如何解决或解决这个问题。
这是我的 gdb 堆栈跟踪。谢谢你。
更新:
我查看了 Boehm Garbage Collector 源文件和头文件,并意识到:Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS
可以通过将 ‑DLARGE_CONFIG 添加到我的 GNUmakefile 中的 CFLAGS 部分来修复错误消息。
我对我的 GNUmakfile 进行了测试,发现Too many heap sections: Increase MAXHINCR or MAX_HEAP_SECTS
错误消息不再出现。但是我遇到了一个新的分段错误(核心转储)。使用 gdb 我发现 GDB 分段错误发生在第 20 行的以下函数中(我已注释):
我想知道是否可以修改此功能以修复分段错误。谢谢你。
c - Boehm GC 如何为 C 程序工作?
我检查了 Boehm GC。C/C++ 的 GC。
我知道标记和扫描算法。我很好奇的是它如何只获取整个 C 内存中的指针。我对 C 内存的理解只是一个普通的字节数组。是否可以确定内存中的值是否为指针?
memory-management - 分代垃圾回收和增量垃圾回收有什么区别?
我认为(分代和增量)都是使垃圾收集暂停更快的不同方法。但是代际和增量之间有什么区别?它们是如何工作的?哪个更适合实时软件/产生更少的长时间停顿?
此外,Boehm GC 是其中之一吗?
c++ - Boehm GC 附带的“cord”库导致未定义的引用错误
我有一个项目使用Boehm GC,所以我想我可能会使用cord
它附带的字符串库。问题是我对cord
函数的所有调用都会导致“未定义的引用”错误。
我确实有一个名为libcord.so
in的文件/usr/lib
(这是一个 Linux 系统),我告诉 CMake 将目标gc
与cord
.
针对评论 #1 进行编辑:
从CMakeLists.txt
来自错误消息:
编辑以回应评论#2:
boehm-gc - 任何大型项目都使用 Boehm GC?
我很好奇是否有任何大型项目使用过 Boehm GC?我对是否有任何游戏项目使用过这个垃圾收集器特别感兴趣。如果不是,Boehm GC 对游戏项目不利吗?
像 Boehm GC 这样的简单代码可以处理的事实给我留下了深刻的印象:
使用 Boehm GC 制作游戏有什么注意事项吗?
谢谢
c++ - Boehm 垃圾收集器中的精确模式
我在 Mono 的网页上读到他们在精确模式下使用 Boehm GC。我也将 Boehm GC 与 C++ 一起使用,但是,我在其文档或标题中没有发现任何指示精确模式的内容,更不用说如何打开它了。
任何信息是否默认情况下实际上具有精确模式以及如何打开它,或者它只是 Mono 开发人员的某种修改?