Naf*_*ees 3 garbage-collection memory-leaks d
我正在为我创建的字节代码做一个解释器,它需要非常快,为此,我不希望GC成为瓶颈,所以我禁用它,使用 GC.disable();
但是我经常在互联网上读到D的库要求GC在那里,但是我没有使用很多库,我的问题是,如果我使用以下模块中的以下内容,它是否需要GC?:
to
来自std.convcanFind
来自std.algorithmfile.read
来自std.fileFile
来自std.stdio我正在使用我程序中提到的模块的上述功能,前提是禁用GC是否安全?
小智 7
你误解了GC的禁用功能.除非你真的把它编译出来,否则GC总是可以通过例如new来使用.
现在有一些关于GC如何工作的基础知识,当你分配新内存时,它必须确定它是否可以分配,如果它不能,它必须尝试清理现有内存才能分配.所以对于D的GC,只要有分配就可以继续收集.现在禁用GC只会阻止它继续进行并在分配时进行收集.你总是可以手动鼓动它这样做.
对于解释器,只要您阻止分配(重用内存),您甚至不需要禁用GC以防止它减慢速度.所以记住规则,"大"分配并重用那个内存!
如果您只是想避免调用垃圾收集,那么诀窍就是不要为GC创建任何对象来清理.值得庆幸的是,D有一个属性,将在编译时检查以确保您不会意外地创建任何垃圾:@nogc
有一个很好的描述:http://ddili.org/ders/d.en/functions_more.html
归档时间: |
|
查看次数: |
254 次 |
最近记录: |