在GNAT中使用libgc?

问题描述 投票:1回答:2

我听过几次提到Ada支持垃圾收集 - 并且看着语言设计,它显然是考虑到这一点而设计的。

我有一个非实时的应用程序,垃圾收集真的非常有用。但是我没有看到任何关于我的编译器GNAT可用的垃圾收集器的提及。这让我很惊讶;甚至C通过简单地链接libgc来支持垃圾收集。

如果我只是将libgc添加到我的链接器行,它会工作还是会发生可怕的事情?

garbage-collection ada gnat libgc
2个回答
1
投票

但是我没有看到任何关于我的编译器GNAT可用的垃圾收集器的提及。这让我很惊讶;甚至C通过简单地链接libgc来支持垃圾收集。

您可以使用针对JVM的GNAT。

我认为简单地链接libgc的原因不会给你垃圾收集[至少据我所知]是因为GNAT没有任何关于如何使用它的概念。但是,鉴于GNAT使用GCC后端,我不明白为什么它不应该“只是工作”,如果它使用G / C.


0
投票

我在这里找到了一个libgc绑定作为AdaCL库的一部分:http://adacl.sourceforge.net/

但是,libgc文档还说libgc无法看到存储在通过系统malloc()分配的块中的指针。这意味着仅存储在从默认内存池分配的对象中的访问将不被视为根,并且可能在任何时候都无效。这取消了使用标准Ada容器存储访问可收集对象的资格!这也可能适用于辅助堆栈---但我不知道辅助堆栈的用途。

但是,我的调查显示垃圾收集天真地工作:

while true loop
  p := new big_thing_t;
end loop;

......永远奔跑。所以这可能是理论上可行的,但是现在我觉得它不安全。

© www.soinside.com 2019 - 2024. All rights reserved.