【译】C程序中的内存管理

| 分类 Performance  | 标签 translate  note 

C语言与其他大多数语言最大的差异就在于,在C语言中,你可以亲手掌控内存而不是通过垃圾回收器。确保内存在正确的时刻申请不算困难,难的是确保申请的内存足够用和不是内存时及时地释放。

在C中有很多内存管理的技巧。在NetHack 3.4.3中利用了一部分,更多的用在了NetHack 4中。在这篇博客中,我想逐一讨论他们的优缺点。在这里,我更关注正确性而不是效率,所以,除非效率差异太大,我更关心代码的清晰性而不是代码的速度。


定量内存的分配技术

现下有两种不同议点:时刻跟踪内存分配的生命周期和保证内存分配的大小正确。照此,我将先探讨在编译器大小静态已知的分配,然后介绍如何处理大小未知的情况。

栈上的定量缓存

可能在C中最简单的内存分配当属栈分配。如果一个变量声明在一个函数内部,又没有externstatic修饰符,系统会在变量作用域之始为该变量分配足够的内存,在变量作用域之末释放。由于C语言中作用域良嵌套,一个典型的C实现对于这类变量会使用栈内存。新分配的变量会使用栈顶的空间,在该变量离开作用域时会将栈顶的空间释放。

这种做法有以下几个主要的优点:


Previous     Next