(toppers-users 255) Why don't we use library.

MURANAKA Masaki monaka @ asahi-net.email.ne.jp
2001年 8月 16日 (木) 17:06:21 JST


こんにちは。

ライブラリを使って必要リソースを削減しよう、
という提案です。

まず、下のスクリプトを実行してみてください。

手前でライブラリを作ったほうが、作らないほうよりも
nocall() を含まない分だけtextのサイズが小さくなります。

最近のコンパイラは、この辺りの最適化はやってくれると
思い込んでいたのですが、2.95.x の gcc でもリンク時に
オブジェクトファイルを指定すると、何の最適化もせず
実行形式に取り込んでしまいます。

JSPは、リンク時にオブジェクトを列挙するようMakefile
に書いてあります。ライブラリに纏めてからリンクすれば、
必要メモリの削減に繋がるのではないでしょうか?
(まだ試していません)
SH1のように、使えるメモリに制限がある環境では
有効に作用するように思います。

ソースファイル間での呼び出しの依存性が高ければ
効果は薄いような気もします。かといって分割していくと、
究極的には関数毎に1ファイルという形になって、
見通しが悪くなりそうです。
どこまでやるかは、検討の余地があります。

JSPは、教材としての側面もあるので、本質とは関係ない
姑息な手を使うことに、すこし躊躇する気持ちもあります。

反対意見が無ければ、試してみようと思うのですが、
みなさんはどう思われますか?


--------- スクリプト ----
echo 'a() { printf("aaa"); }' > tmpa.c
echo 'b() { a(); }' > tmpb.c
echo 'nocall() { printf("bbb"); }' > tmpn.c
echo 'extern b(); main() { b(); }' > tmpm.c

gcc -O6 -c tmpa.c
gcc -O6 -c tmpb.c
gcc -O6 -c tmpn.c
ar cr lib.a tmpa.o tmpb.o tmpn.o
ranlib lib.a

gcc -O6 -o compact.out tmpm.c lib.a
gcc -O6 -o fat.out tmpm.c tmpa.o tmpb.o tmpn.o

--
from もなか