文章预览
对于开发者来说,内存无非是两种管理模式: 手动管理或者自动管理。 C 语言是手动管理内存的大哥大,而 Java 则是自动 管理的扛把子。 很多人认为 Java 是使用垃圾回收做内存管理的鼻祖,其实不然,lisp 早于 Java 大概二三十年就武装上了简单的 GC。 不过公认的高效率的 GC 是 Java 带给我们的。 不管手动管理还是自动管理内存,这个「管理」,我们说的都是堆上的内存。几乎所有的编程语言,一切栈上的内存都是自动管理的,并且在编译时就已经妥善完成了。 那么栈上的内存是怎么管理的呢?下面是一个简单的函数调用的例子: # include static int VALUE = 42 ; void world ( char *st, int num) { printf ( "%s(%d)\n" , st, num); } void hello ( int num) { char *st = "hello world" ;
………………………………