6: 2009-11-17 (火) 12:07:32 |
現: 2024-01-08 (月) 12:59:03 k-tan |
- | * tek圧縮でよく使われるrjcについて | + | TITLE:x |
| + | * tek圧縮でよく使われるrjcについて [#w57267b6] |
| -(by [[K]], 2008.12.09) | | -(by [[K]], 2008.12.09) |
- | *** (0) | + | *** (0) [#vdad46e2] |
| -まずは祝tek普及~!・・・NWSOSの開発が再開されてしかもtek圧縮を採用する予定らしいことをIRCで教えてもらいました。とてもうれしいです。OSASK発祥の圧縮文化は少しずつですが着実に認められて浸透しているようです。---この件修正。詳細はこめんと欄参照。 | | -まずは祝tek普及~!・・・NWSOSの開発が再開されてしかもtek圧縮を採用する予定らしいことをIRCで教えてもらいました。とてもうれしいです。OSASK発祥の圧縮文化は少しずつですが着実に認められて浸透しているようです。---この件修正。詳細はこめんと欄参照。 |
| ~ | | ~ |
| ~ | | ~ |
| -これでOSASKがもしOSとしての競争に敗北し絶滅してしまったとしても、圧縮文化の発祥としてそしてtekの発祥としてOSASK計画は歴史に名を残すことができるかもしれないわけです(上記のどれかが生き残っていてくれさえすれば)。まあOSとしても敗北しないほうがもちろんいいですし、僕は敗北するとはまだ思っていませんが。 | | -これでOSASKがもしOSとしての競争に敗北し絶滅してしまったとしても、圧縮文化の発祥としてそしてtekの発祥としてOSASK計画は歴史に名を残すことができるかもしれないわけです(上記のどれかが生き残っていてくれさえすれば)。まあOSとしても敗北しないほうがもちろんいいですし、僕は敗北するとはまだ思っていませんが。 |
- | *** (1) | + | *** (1) [#r8f3e3b3] |
| -さてそのtek圧縮ですが、実はOSASK以外のOSではtek圧縮だけを普通に使っているだけです。データファイルは確かにこれで問題ないんです。しかし新旧のOSASKアプリでは当然のようにrjcというフィルタも併用していて、これが圧縮率を高めるのに大いに寄与しています。これじゃあOSASKアプリとサイズ比較するときにOSASKばかりが有利になってしまってずるいと思います。 | | -さてそのtek圧縮ですが、実はOSASK以外のOSではtek圧縮だけを普通に使っているだけです。データファイルは確かにこれで問題ないんです。しかし新旧のOSASKアプリでは当然のようにrjcというフィルタも併用していて、これが圧縮率を高めるのに大いに寄与しています。これじゃあOSASKアプリとサイズ比較するときにOSASKばかりが有利になってしまってずるいと思います。 |
| -またrjcに相当するフィルタは、LZMA(7z)やUPXでも当然のように利用されていて、rjcを使わないtek5とこれらを比較すると場合によっては圧縮率で逆転します。それじゃあtek5の実力が誤解されかねません。それは僕としては不本意です。もちろんrjcはtek5以外のtek圧縮とも併用できますし、相性もいいです。 | | -またrjcに相当するフィルタは、LZMA(7z)やUPXでも当然のように利用されていて、rjcを使わないtek5とこれらを比較すると場合によっては圧縮率で逆転します。それじゃあtek5の実力が誤解されかねません。それは僕としては不本意です。もちろんrjcはtek5以外のtek圧縮とも併用できますし、相性もいいです。 |
| -rjcを使わずにtek5した場合と、rjcしてからtek5した場合のサイズの差は、たいてい1割前後です。この差はかなり大きいです。tek5の改良だけで(たいした速度低下もなく)1割も圧縮率を改善するというのはほぼ不可能といっていいレベルだと思います。 | | -rjcを使わずにtek5した場合と、rjcしてからtek5した場合のサイズの差は、たいてい1割前後です。この差はかなり大きいです。tek5の改良だけで(たいした速度低下もなく)1割も圧縮率を改善するというのはほぼ不可能といっていいレベルだと思います。 |
| -rjcは極めて処理時間が短く、コードもとても小さい簡単なフィルタです。rjc単体で見るとrjcによってサイズが増えたり減ったりすることはありません。大きさはそのままで圧縮が効きやすい状態にしているだけです。・・・処理内容を簡単に説明するとIA-32の分岐処理のコードは相対ジャンプ命令(near-callも該当)が中心で、同じオフセットへのジャンプであってもそれぞれ違う機械語になっています。つまり同じ場所へのジャンプ命令であるにもかかわらず、それは何度出てきても初出の命令列になり、スライド辞書圧縮がほとんど効きません。こういうコードはIA-32の一般的なプログラムでは頻出するので、これをrjcエンコードフィルタによってスライド辞書法が適用しやすい形式に変換してから圧縮してやろうというわけです。また展開時には通常のtek展開の後にrjcのデコードフィルタをかけることで、展開処理を完了します。 | | -rjcは極めて処理時間が短く、コードもとても小さい簡単なフィルタです。rjc単体で見るとrjcによってサイズが増えたり減ったりすることはありません。大きさはそのままで圧縮が効きやすい状態にしているだけです。・・・処理内容を簡単に説明するとIA-32の分岐処理のコードは相対ジャンプ命令(near-callも該当)が中心で、同じオフセットへのジャンプであってもそれぞれ違う機械語になっています。つまり同じ場所へのジャンプ命令であるにもかかわらず、それは何度出てきても初出の命令列になり、スライド辞書圧縮がほとんど効きません。こういうコードはIA-32の一般的なプログラムでは頻出するので、これをrjcエンコードフィルタによってスライド辞書法が適用しやすい形式に変換してから圧縮してやろうというわけです。また展開時には通常のtek展開の後にrjcのデコードフィルタをかけることで、展開処理を完了します。 |
- | *** (2) | + | *** (2) [#waf4dba7] |
| -rjcは以下のような簡単な関数で、エンコード・デコードできます。この関数が返す値は、rjcが変換した箇所の個数です。以下はabcdw006で採用されているrjcです。 | | -rjcは以下のような簡単な関数で、エンコード・デコードできます。この関数が返す値は、rjcが変換した箇所の個数です。以下はabcdw006で採用されているrjcです。 |
| | | |
| } | | } |
| -このフィルタを実行ファイル全体にかけても十分に効果は出ますが、コードセクションがファイル内のどこなのか分かっているのなら、コードセクションにのみrjcしたほうが、rjc時間が短くなりますし(といっても些細な差ですが)、圧縮率も若干改善します(微々たる差でしかないことも多いですが)。 | | -このフィルタを実行ファイル全体にかけても十分に効果は出ますが、コードセクションがファイル内のどこなのか分かっているのなら、コードセクションにのみrjcしたほうが、rjc時間が短くなりますし(といっても些細な差ですが)、圧縮率も若干改善します(微々たる差でしかないことも多いですが)。 |
- | *** (3) | + | *** (3) [#jf92a69b] |
| -参考までに、NWSOS0034-IMG内のNWSA.EXEとNWSC.EXEについてrjcの効果を挙げておきます(2ちゃんねるで話題になっていたので)。僕にはコードセクションの位置は分からないので、とりあえずrjcはファイル全体にかけています。 | | -参考までに、NWSOS0034-IMG内のNWSA.EXEとNWSC.EXEについてrjcの効果を挙げておきます(2ちゃんねるで話題になっていたので)。僕にはコードセクションの位置は分からないので、とりあえずrjcはファイル全体にかけています。 |
| | |圧縮なし |tek5だけ |最高パラメタtek5だけ|rjc+tek5 |rjc+最高パラメタtek5| | | | |圧縮なし |tek5だけ |最高パラメタtek5だけ|rjc+tek5 |rjc+最高パラメタtek5| |
| |NWSA.EXE|RIGHT:121,040|RIGHT:50,041|RIGHT:49,414 |RIGHT:46,678|RIGHT:46,107| | | |NWSA.EXE|RIGHT:121,040|RIGHT:50,041|RIGHT:49,414 |RIGHT:46,678|RIGHT:46,107| |
| |NWSC.EXE|RIGHT:152,512|RIGHT:71,174|RIGHT:70,230 |RIGHT:63,204|RIGHT:62,291| | | |NWSC.EXE|RIGHT:152,512|RIGHT:71,174|RIGHT:70,230 |RIGHT:63,204|RIGHT:62,291| |
- | * こめんと欄 | + | * こめんと欄 [#e9f750d7] |
| - 補足:(0)でNWSOSのtek圧縮の採用を歓迎したが、[[GUIGUI01/memo12]]の問題によりこれを撤回し、むしろ遺憾であるとする。 -- [[K]] &new{2008-12-13 (土) 18:59:40}; | | - 補足:(0)でNWSOSのtek圧縮の採用を歓迎したが、[[GUIGUI01/memo12]]の問題によりこれを撤回し、むしろ遺憾であるとする。 -- [[K]] &new{2008-12-13 (土) 18:59:40}; |
| | | |
| #comment | | #comment |