内存管理

V语言没有自动内存回收(GC)和引用计数。V语言会在编译阶段完成必要的清理工作。例如:

  1. fn draw_text(s string, x, y int) {
  2. ...
  3. }
  4. fn draw_scene() {
  5. ...
  6. draw_text('hello $name1', 10, 10)
  7. draw_text('hello $name2', 100, 10)
  8. draw_text(strings.repeat('X', 10000), 10, 50)
  9. ...
  10. }

因为字符串没有从draw_text函数逃逸,因此函数调用返回之后就可以被清理。实际上这几个函数调用不会产生任何内存分配的行为。因为两个字符串比较小,V语言会使用提前准备好的缓冲区构造字符串。

对于复杂的情况,目前还需要手工管理内存。但是我们将很快解决这个问题。

V语言运行时会检测内存泄露并报告结果。要释放数组,可以使用free()方法:

  1. numbers := [0; 1000000]
  2. ...
  3. numbers.free()