DOS とかで,config.sys をいじって○○を UMB にロードしたりとか,メインメモリの空きを 1バイトでも多くする事に命をかけてた事ってあったじゃん? アセンブラでも自己可変コードとか使ってクロック数単位で実行速度を上げたりとかしたよね.あ,俺だけ? はいはい,どうせあたしゃ変ですよ.
で,めでたく CFW3.30OE-A' に対応できた gpshook だが,どうもメモリがきついらしい.いや,単体だとまだ余裕ありげなんだけど,mp3prx がでかい (俺的にはこれははずせない) ので,もうぎりぎりっぽい.なので,gpshook.prx のサイズを小さくしようと,かつてのメモリ節約魂が復活したわけ.
で,いろいろ試して面白かったのは,整数/浮動少数演算が混在している箇所で,コードサイズが結構変わる.
例1)
int_a = int_val + float_val * 100;
-----
int_a = int_val + ( int )float_val * 100;
こりゃ当たり前レベルなので分かりやすい.浮動小数点演算を行う範囲が減ってるもんね.
例2)
unsigned int uint_val = float_val;
-----
unsigned int uint_val = ( int )float_val;
float_val が正数しかとらない場合,結果はどちらも同じだが,なんとこれもコードサイズが違う.
上のほうでは,なんか符号をいろいろいじるコードが余計についていた.
例3)
int int_val = int_val2 % 360;
-----
unsigned uint_val = uint_val2 % 360;
これも差がないと思ってたら,下のほうが小さかった.
とにかく,変数が signed か unsigned かだけでも 数10バイトの差が出てくる.
(あくまでも psp-gcc (MIPSコンパイラ) の場合だが)
たまには gcc が吐いたアセンブラを眺めるのもいいなぁとおもった.え,そんなことないって? はいはい,どうせあたしゃ変ですよ.
てか,gpshook.prx でちまちま削るより,mp3prx をいじったほうがザクっと削れそうだということに今氣が付いた.
2007年5月6日日曜日
コードを1byte小さくする事に命を賭ける
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿