越靠近硬件的编程语言倾向于让程序员控制内存,越高级的语言倾向于用GC控制内存。
- C/C++完全需要程序员控制内存,C++还提供智能指针以实现RAII机制.
- ObjC 提供了引用计数和ARC方式。
- Java/C#/Python 等编程语言提供GC,不需要程序员显式控制内存申请和释放。
- 但需要注意,如果申请的是系统核心资源(例如信号量、互斥体等),GC无法得知何时释放,它们必须由程序员控制释放。
- Swift 继承ObjC ARC, 也采用ARC引用计数控制内存管理,不像GC更消耗资源,也具备一定的性能优势,是很优秀的实现方式。
- Rust 堆内存采用智能指针。
内存分配器
- Rust 编译器使用jemalloc.