我是一名C++程序员,考虑在我想要玩耍的个人项目中使用D语言。 我想知道是否有一种方法可以完全禁用垃圾回收器,并且这样做的风险是什么。
我知道我可以通过重写new和delete来使用malloc和free来管理自己的内存,但如果我这样做,我更希望垃圾回收器根本不运行。
我是一名C++程序员,考虑在我想要玩耍的个人项目中使用D语言。 我想知道是否有一种方法可以完全禁用垃圾回收器,并且这样做的风险是什么。
我知道我可以通过重写new和delete来使用malloc和free来管理自己的内存,但如果我这样做,我更希望垃圾回收器根本不运行。
import core.memory;
void main(string[] args) {
GC.disable;
// Do stuff.
}
如果使用 D1/Phobos:
import std.gc;
void main(char[][] args) {
std.gc.disable;
// Do stuff.
}
在 D1/Tango 中:
import tango.core.Memory;
void main(char[][] args) {
GC.disable;
// Do stuff.
}
GC可以通过调用GC.enable(D2或D1 / Tango)或std.gc.enable(D1 / Phobos)类似地重新启用。这些可以在程序的任何时刻完成。内部使用计数器,要实际重新启用GC,您必须为每次调用disable()调用一次enable()。GC.disable
并不能禁用垃圾回收器,它只是暂停了垃圾回收。垃圾回收器及其堆仍然存在。 - rustyx-betterC是dmd的一个命令行标志,它限制了编译器对某些运行时特性的支持。值得注意的是,使用betterC编译的D程序或库不会链接Druntime。任何编译时特性都没有受到限制。 https://dlang.org/spec/betterc.html
使用此命令行标志的结果之一是禁用GC和依赖它的语言特性。
由于没有可用的Druntime,许多D特性将无法工作。例如:
垃圾回收器可以被移除并替换为一个简单的malloc/free包装器。