Arc 是 Atomically Reference Counted 的缩写,即"原子引用计数"。
它的作用是:让多个所有者同时持有同一份堆上数据,且可以安全地跨线程使用。
Rust 里 Arc::new(value) 内部就是把数据分配到堆上,然后返回一个指向它的智能指针。对应到 C 大概是:
c
// C 的手动版本
typedef struct {
int ref_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