GC 安全的作用

当过程 p 不访问任何使用了 GC 内存的全局变量( string seq ref 或一个闭包)时 —— 无论是直接访问还是通过调用不是 GC 安全的过程进行间接访问 —— 我们就称 p 是 GC safe “GC 安全” 的。

是否 GC 安全通常可被推断出来,与异常追踪的推断类似。

gcsafe 注解可把过程标记为 GC 安全的,否则将由编译器推断是否是 GC 安全的。值得注意的是, noSideEffect 暗含着 gcsafe 。

从 C 语言库导入的例程将总是被看作 gcsafe。

{.cast(gcsafe).} 编译指示块可覆盖编译器的 GC 安全分析:

  1. var
  2. someGlobal: string = "some string here"
  3. perThread {.threadvar.}: string
  4. proc setPerThread() =
  5. {.cast(gcsafe).}:
  6. deepCopy(perThread, someGlobal)

参阅: