[资料] D语言的GC与内存模型

Colorful 2007-08-08
qiezi 写道
phobos里实现的GC和stl相似,都会为一些小对象使用不同的池,并不是简单地加一个值,GC Heap也不是一整块内存,当然实现成一整块也是可能的,不过phobos里面似乎并不是这么实现的。从我阅读的代码来看,它也是用链表的。


GC的内存分配策略是复杂的,比如pool的应用,如何分配大对象等。
比如说一开始分配内存时,先用一个pool,这个pool一开始是保留的连续内存块,并没有真正映射到物理内存,只有需要的时候才会提交内存。
GC Heap只是一个上层抽象概念。
实现代码中的链表跟C中的链表作用是不一样的。
sofire 2007-08-08
achun 写道
各位讨论的.........
我看着就觉得晕.
各位既然做了如此深入的研究.
可否指点一下在不考虑代码繁琐的情况下.
如何写代码,才能让GC在释放内存的时候尽量的快.
或者说,我们如何手动的用一些代码.改进GC在释放内存的时候尽量少的付出挂起开支?
又或者.D的这几个基础库,对比一下GC的挂起开支?


我也看着头晕。

问个问题。D1 和 D2有啥区别。
如果我写程序,应该用那个?
player7 2007-08-09
好像在哪看到过这些,如果是非实时的程序,那么GC的影响基本上没有;
如果是高实时性的程序,就算用C++也都是要自己重新做内存管理模块的;
tomqyp 2007-08-10
oldrev 写道
老实说,我很讨厌GC,因为我讨厌在程序里有不确定的东西
官网文章说GC只会在 new/delete 的时候动作,但是动作的时候会挂起所有的线程,假如一个系统实时性要求高,这恐怕是不能接受的


我觉得单从性能上讲的话,在单CPU的机器中,不管有没有GC,整个进程占用CPU时间是固定的,只不过没有GC的情况是把内存管理所占用的时间分摊到其它工作线程中罢了。既便是在多cpu、大量线程,这种GC代价比较大的情况下,也可以用多进程来解决。

如果一定要强调实时性的话,恐怕即时的分配回收内存的方式时间代价也是不小的,应该尽量在栈中解决,或者其它更好的办法。
Global site tag (gtag.js) - Google Analytics