Who Owns the Memory? Part 1: What Is an Object?
4 months ago
- #low-level
- #memory-management
- #performance
- 在C、C++和Rust中,内存管理从字节层面开始构建,逐步涉及对象、存储期、生命周期和别名使用等概念。
- 64位处理器将内存视为可寻址字节的扁平数组,无法识别结构体或整型等类型信息。
- 现代操作系统通过MMU管理虚拟地址空间,实现进程隔离和可移植性。
- 内存对齐对性能至关重要,访问未对齐数据可能导致性能损失或硬件陷阱。
- 缓存行和内存带宽优化受数据结构布局和填充策略的影响。
- malloc等内存分配器需要管理元数据并保证对齐,这些操作都会带来开销。
- 内存中的对象可视为字节数组,其语义由类型系统赋予。
- C语言通过有效类型规则确定内存访问方式,从而支持编译器优化。
- C++引入对象生命周期概念,区分存储期与可访问时段。
- Rust强制保持有效性不变式,产生无效值会立即触发未定义行为。
- 存储期分为静态、线程局部、自动和动态分配四种类型。
- 栈分配高效但容量有限,堆分配则需要更多开销和复杂度。
- Rust的所有权系统通过生命周期追踪和编译时检查确保内存安全。
- C/C++/Rust的别名规则通过限制指针重叠来优化性能。
- Rust借用检查器强制实施「共享引用与可变引用互斥」原则,防止数据竞争并支持优化。