Arc是Atomically Reference Counted的缩写,即"原子引用计数"。
它的作用是:让多个所有者同时持有同一份堆上数据,且可以安全地跨线程使用。
Rust 里 Arc::new(value) 内部就是把数据分配到堆上,然后返回一个指向它的智能指针。对应到 C 大概是:
// C 的手动版本typedefstruct{intref_count;// Arc 的引用计数YourData data;// 实际数据}ArcInner;ArcInner*ptr=malloc(sizeof(ArcInner));ptr->ref_count=1;ptr->data=...;Arc::clone 就是 ref_count++,Arc 被 drop 就是 ref_count–,降到 0 就 free(ptr)。
区别在于:
- C 里你得自己维护这套逻辑,容易 double-free 或 use-after-free
- Rust 的 Arc 把这套计数逻辑封进类型系统,编译器帮你保证正确性,且 ref_count 的加减是原子操作(线程安全)
所以 Arc 本质上就是 线程安全的、自动管理的 malloc + 引用计数。
TODO: here