全部博文(306)
分类: LINUX
2011-07-29 16:43:38
gcc有一个自己的内存管理器来管理内存的分配和重用。ggc-min-heapsize和ggc-min-expand这两个参数控制着这个内存 管理器的行为。当分配的内存超过ggc-min-heapsize时候,旧的内存就会被回收。而ggc-min-expand指定了每次内存分配的最小增 长率。简单地说,当前的heap,增加ggc-min-expand%,如果超过ggc-min-heapsiz,则进行内存回收操作。
ggc-min-heapsize的值越大,编译花在内存分配上的时间就越小,所以,这个值越大,编译速度就很有可能得到提升。但是同时也会更多内存。
编译时候所需要的内存,一般来说是不需要太关注的。但是,如果希望在小设备上进行编译,这两个参数可能就会变得非常有用。虽然ggc-min- heapsize默认是实际内存的1/8,但是有时候,能使用的并不到1/8。这时候,就可以通过设置这个参数来以更小的内存进行编译。
设置这个参数的方式很多。例如通常的configure脚本,可以以CFLAGS的变量来设置。
root@com:~# CFLAGS=”$CFLAGS –param ggc-min-expand=0 –param ggc-min-heapsize=2048″ ./configure
另外顺便提一下mysql(5.0.89)的configure参数–with-low-memory。我本来以为也是用ggc-min-*来实现 的,但是看了实现之后,发现是设置了-fno-inline这个参数。很纳闷。根据我的理解,这个no-inline忽略函数的inline标志,也就是 说,inline的函数不会被展开到代码里。这虽然稍微减小了编译时候的内存操作,但是更多的是影响了生成的二进制的执行效率。不知道mysql为何如此 实现,而且在help的参数描述里,并未提到这一点。