BusyBoxのメモリ削減の工夫
Denis君によると、新しいBusyBoxは、メモリ利用の削減の試みをしているそうだ。
http://www.busybox.net/cgi-bin/viewcvs.cgi/trunk/busybox/docs/keep_data_small.txt?rev=18792&view=markup
各アプレットが、勝手にglobal変数を定義すると、これらは、bssセクションというところに確保されるらしい。
で、BusyBoxを実行すると、それらglobal変数用の領域がガサッと確保されてしまう。
#ということだと思う
実際は、一つのアプレットしか走らないというのに、その他全部のアプレット用のグローバル変数領域が確保されてしまう。
これでは、無駄が多い。
そこで、busyboxには、
全アプレットで共通して使えるグローバル変数用のバッファが用意された。
bb_common_bufsiz1というバッファが用意されている。
使いかたは、ちょっとトリッキー。
各アプレットで
struct global {
hoge
foo
}
というglobal構造体を作る。
ここでは、「hoge,foo」をグローバル変数としたいとする。
で、各アプレットのファイル内で、
#define G (*(struct globals*)&bb_common_bufsiz1)
#define hoge (G.hoge)
#define foo (G.foo)
とする。