【发布时间】:2011-05-24 04:23:34
【问题描述】:
我承认我目前对 D 没有深入的了解,我的知识完全依赖于我阅读过的文档和我尝试过的几个示例。
在 C++ 中,您可以依靠 RAII 习语在对象退出其本地范围时调用其析构函数。
你能在 D 中吗?
我了解 D 是一种垃圾收集语言,并且它也支持 RAII。 为什么下面的代码在离开作用域时没有清理内存?
import std.stdio;
void main() {
{
const int len = 1000 * 1000 * 256; // ~1GiB
int[] arr;
arr.length = len;
arr[] = 99;
}
while (true) {}
}
无限循环的存在是为了让程序保持打开状态,使剩余内存分配很容易看到。
下面显示了 C++ 中等效相同程序的比较。
可以看出,C++ 在分配后立即清理了内存(刷新率使它看起来好像分配了更少的内存),而 D 保留它,即使它已经离开了范围。
那么,什么时候进行 GC 清理呢?
【问题讨论】:
标签: memory-management garbage-collection d raii