如何快速获取 少量收藏?我试过了...
let get_minor_collection_count () =
let stat = Gc.quick_stat ()
in stat.minor_collections
...,但是ocamlopt
版本4.07.1
发出的X64汇编代码看起来像这样:
_camlDemouser2__get_minor_collection_count_2666: subq $8, %rsp movq $1, %rdi movq _caml_gc_quick_stat@GOTPCREL(%rip), %rax call _caml_c_call movq _caml_young_ptr@GOTPCREL(%rip), %r11 movq (%r11), %r15 movq 24(%rax), %rax addq $8, %rsp ret
如果我使用C代码访问caml_stat_minor_collections
,则访问本身的速度很快 1 ,但是必须使用_caml_c_call
会产生较高的费用像这样的小型C函数。
我可以采取什么措施来纠正这种情况?
希望将来的ocaml版本添加类似Gc.get_minor_free
(添加4.03.0
)的功能,对于像我这样的GC黑客来说,这是一个类似的小功能:)
还是应该深入研究ocamlopt
使用的内部IL?
或者flambda
可以帮助我吗? RTFM的答案是可以的:)
提前感谢您的想法/建议/代码段!
1: clang
发出movq _caml_stat_minor_collections@GOTPCREL(%rip), %rax
。