[疑难] 如何在D语言中进行指针操作?
Colorful
2007-04-21
请教各位达人,如果在D的堆上进行指针操作,该怎么应用啊。
D的GC会随时可能改变对象的地址,有没有办法可以先通知GC暂时不要对我要操作的对象进行操作,等我操作完了之后再把控制权交给GC,就像C#之fixed所采取的那样? |
|
qiezi
2007-04-21
你自己在堆上分配的,GC不会管你的,除非你调用了gc.addRange让它帮你拖管。
|
|
Colorful
2007-04-21
qiezi 写道 你自己在堆上分配的,GC不会管你的,除非你调用了gc.addRange让它帮你拖管。
可能我没有表达清楚。 刚才又去看了下D的内存分配。 我的理解是这样: 除了那些显式使用malloc进行内存分配的,或者显式把对象分配到堆栈上的,其他的只要是在堆上分配,肯定就是在托管堆上分配了。 而且绝大部分的类实例应该都是在托管堆上分配的。 我所指的指针操作就是在这种情况下的。 |
|
oldrev
2007-04-21
gc.disable
gc.enable |
|
Colorful
2007-04-21
oldrev 写道 gc.disable
gc.enable 这样的话,会不会导致整个GC暂停? 我所要的只是GC暂时放弃我要操作的对象的内存控制权,过后再还给它。 |
|
oldrev
2007-04-21
D 中的GC没有独立线程,只是在分配内存的时候运行
|
|
Colorful
2007-04-21
oldrev 写道 D 中的GC没有独立线程,只是在分配内存的时候运行
这个,还真不知道,呵呵。 老大给个讲解这部分内容的地址,我回去好好补课。 |
|
oldrev
2007-04-22
http://www.digitalmars.com/d/memory.html
|
|
tianwei7518
2009-09-16
|
|
RednaxelaFX
2009-09-16
话说DMD的D中使用的的修改版Boehm GC应该不是moving-GC吧。它应该是在保守模式下运行的,不会移动对象。从这个实现来说,在D里不用fixed也没关系。所以直接拿指针吧,不怕。以后D的实现要是改了那再说……GNU版后端也是用Boehm GC的,也一样不会移动对象。
|