问题标签 [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.
compiler-construction - 自定义分配和 Boehm GC
在我的 on-again-off-again 编译器项目中,我将闭包实现为具有可执行前缀的分配内存。所以一个闭包是这样分配的:
c
是一个指向已分配内存块的指针,如下所示:
closure_call 是一个帮助函数,它查看最近放置在堆栈上的地址,并使用它来查找闭包数据和代码指针。Boehm GC 用于一般的内存管理,当闭包不再被引用时,它可以被 GC 释放。
无论如何,这个分配的内存需要标记为可执行;事实上,它跨越的整个页面都被标记了。随着闭包的创建和释放,进程中越来越多的堆内存将是可执行的。
出于防御性编程的原因,我更愿意最小化可执行堆的数量。我的计划是尝试将所有闭包放在同一个页面上,并根据需要分配和释放可执行页面;即为闭包实现自定义分配器。(如果所有闭包的大小相同,这会更容易;因此第一步是将环境数据移动到可以正常管理的单独的非可执行分配中。这也使防御性编程有意义。)
但剩下的问题是GC。Boehm 已经这样做了!我想要以某种方式告诉 Boehm 我的自定义分配,并让 Boehm 告诉我他们什么时候能够被 GC 处理,但让我来取消分配它们。
所以我的问题是,Boehm 中是否有提供这样的自定义分配的钩子?
.net - 如果垃圾收集器在 Monotouch 4 中“更具侵略性”,这意味着什么?
我偶然发现了这个问题:ContentView 中的按钮导致 MonoTouch 运行时崩溃。Monotouch 4.0 中的错误?并且询问者对 Monotouch 的“更具侵略性”的垃圾收集器有问题。
- 有人可以解释为什么在询问者的情况下会发出错误(收集了什么以及为什么?)?
- “更具侵略性”是什么意思?我可以落入哪些陷阱?我应该避免什么?
- 关于 iOS5:Apple 声称在 iOS5 中应用会收到一个内存警告,然后就会被杀死。与之前的任何其他版本不同,应用程序收到三个警告。这对 Monotouch 意味着什么?它将如何处理这种行为?
也许 Xamarin 团队中的一个可以总结一些注意事项并给出一个很好的解释?
我目前正在从 MT 3.2.6 升级到 MT 4.1,并且想检查我的代码并检查需要更改的内容。
c - BoehmGC - 了解内存分配器 GC_malloc
我在理解 BoehmGC 分配方案时很头疼 - GC_malloc
. 我不知道它是如何分配内存的,也没有看到任何GC_malloc
内部调用的 malloc 或 mmap。
有人可以帮助我吗?任何链接或代码片段都会有很大帮助。
非常感谢提前。 Boehm GC 源代码
macports - 如何使 libgc 在 Mac OS X 中工作?
我肯定错过了什么。即使是使用 libgc 的最简单的测试程序也会失败。有什么线索吗?
我正在使用与 macports 一起安装的 libgc 版本 1。
ubuntu - 如何在 Ubuntu 12.04 中使用 Boehm 垃圾收集器
考虑程序:
在 Ubuntu 10.04 LTS 下编译 ( gcc -lgc test.c
)。在 12.04 LTS 下:
看起来在 10.04 和 12.04 之间,他们已经更改了库而不是在 malloc 替换中编译。或者这就是我认为这个libgc1c2
包裹的描述所说的:
有没有一种简单的方法来解决这个问题?(比如说,比手动重新编译 libgc 更简单...)
c - 在 C 中寻找垃圾收集的根源
我正在尝试在 C 中实现一个简单的标记和清除垃圾收集器。算法的第一步是找到根。所以我的问题是如何在 C 程序中找到根源?
在使用 malloc 的程序中,我将使用自定义分配器。这个自定义分配器就是将从 C 程序调用的所有内容,并且可能是自定义 init()。
垃圾收集器如何知道程序中的所有指针(根)是什么?另外,给定一个自定义类型的指针,它如何获取其中的所有指针?
例如,如果有一个指针 p 指向一个类列表,它里面有另一个指针..说 q。垃圾收集器如何知道它,以便它可以标记它?
更新:如果我在初始化时将所有指针名称和类型发送给 GC 怎么样?同样,也可以发送不同类型的结构,让GC遍历树。这甚至是一个理智的想法还是我只是疯了?
c++ - boehm-gc :终结器,并缩小以适应堆
我有 2 个关于 boehm-gc 的问题。
当 GC 收集垃圾对象时,尽管对象具有析构函数,但 GC 释放内存而不调用析构函数。我发现 GC 调用“finilizer”,但我不知道如何注册它......我该怎么办?
当 GC 收集垃圾时,GC 似乎没有调用 free() (或其他内存释放函数)。看起来GC并没有释放垃圾,而是将其放入GC的内存池中,并在下次分配时使用池。GC空闲时释放内存池?如果没有,我可以对 GC 说“请释放内存池”吗?
PS。我找不到 boehm-gc 参考资料。你能告诉我参考资料在哪里吗?
c - 在多个线程中独立运行 Boehm GC
我正在尝试为 Rust 编写一些与 Boehm GC 的绑定。
一些背景知识:Rust 被设计为一种高并发语言,这种设计的结果是能够将 GC 指针静态限制在分配它们的线程内(也就是说,在线程x中分配的 GC 指针可以永远不会被另一个线程保持活动状态(甚至根本不会被引用)。
因此,我希望推动 Boehm 尽可能地利用这一点来提高性能:
- 线程安全,所以我可以从多个线程分配和收集
- 尽可能少地停止集合(即仅当前线程),其他线程可以继续运行,因为它们不可能干扰与自身之外的 GC 指针相关的任何内容
- 最好是完全本地线程,不同线程的 GC“实例”之间没有同步
1 很简单,但我找不到 2 和 3 的任何设施。最重要的部分是 1 和 2,因为我希望能够让线程在后台运行,而与其他线程在做什么无关(即使它们都在分配和垃圾收集千兆字节的内存)。
(我确实知道THREAD_LOCAL_ALLOC
&gc_thread_local.h
,但这并不能完全满足 3 ,它只是提高了效率,但是在线程之间传输本地分配的指针仍然有效,而我不需要那个保证。)