代码之家  ›  专栏  ›  技术社区  ›  Peter Alexander

D中的非托管内存管理

  •  1
  • Peter Alexander  · 技术社区  · 14 年前

    避免在D中使用GC的最佳方法是什么?有没有方法使用不涉及内存管理的类,或者必须使用指向McAlc结构的指针,就像C和C++中的?

    4 回复  |  直到 14 年前
        1
  •  3
  •   Community kfsone    7 年前

    slicing problem . 另一方面,D是一种系统语言。因此,使用带有手动内存管理的类是丑陋的,但却是可行的。

    std.typecons.scoped() . 您可以(同样,不安全地)使用 std.conv.emplace() core.stdc.malloc() GC.addRange() 如果类可能包含指向GC分配内存的指针。

        2
  •  1
  •   DK.    14 年前

    (免责声明:我是一个D1.0程序员,而不是D2.0)

    override the new operator 为类分配内存;不过,我相信在D2.0中这一点已经被删除了。

    在一个更极端的情况下,您总是可以用malloc包装器替换GC,它要求您手动管理所有内容(尽管我相信只有d1.0+Tango使这变得不那么痛苦)

    delete 在一个你没有通过 new .

        3
  •  0
  •   Zuu    14 年前

    前面的两个答案都采用了这种方法来解释D在内存管理方面的能力是什么和不是什么。我不确定他们是否抓住了问题的实质。

    std.c.stdlib . GC将忽略由此分配的任何内容。

    注:我也是D1人。

        4
  •  -1
  •   Chris Nicholson-Sauls    14 年前

    我很好奇为什么您特别需要手动管理的类实例。我不是想把你击倒,我只是想在我真正回答之前理解一下。结构不适合您的需要有什么原因吗?这些对象是否超出了它们的创建范围?这纯粹是一个频繁创建/销毁的问题,使用免费列表可能是一个解决方案吗?