内存管理机制

管理策略

V语言提供4种内存管理方案:

  1. 默认机制:高性能追踪GC(垃圾回收)
  2. 自动释放(autofree):通过-autofree编译选项启用▶︎ 自动插入90-100%对象的释放调用▶︎ 剩余少量对象由GC处理
  3. 完全手动管理:使用-gc none编译选项
  4. 竞技场预分配:通过v -prealloc启用
// 自定义类型手动释放
@[unsafe]
fn (data &MyType) free() {
// 释放逻辑...
}

Autofree目前处于开发阶段(WIP),暂不建议生产环境使用默认推荐:采用高性能GC方案


栈与堆分配机制

存储区

特点

分配规则

零管理开销

函数返回自动释放

大容量存储

需显式管理生命周期

编译器决策逻辑

struct MyStruct { n int }

fn main() {
    a := MyStruct{}  // 栈分配(未泄露地址)
    b := MyStruct{}  // 堆分配(通过&b返回地址)
    return &b
}

强制堆分配方案

@[heap]  // 编译器标记
struct LargeStruct { data [1e6]byte }  // 大对象强制堆分配

安全操作规范

❌ 危险操作:

fn (mut a MyStruct) f() &MyStruct {
    return &a  // 返回借用的对象地址(需用[heap]标记)
}

✅ 推荐替代方案:

// 方法链式调用
x.f().g()  // 替换为→
mut y := x
y.f()
y.g()

⛔ 绝对避免操作:

unsafe { 
    r.r = s  // 绕过编译器检查(导致悬垂指针)
}