Develop and Download Open Source Software

OpenSource Downloads

7-Zip  (4,014)  
HandBrake Japanese Language Version  (2,964)  
CrystalDiskInfo  (1,714)  
Boookends  (1,269)  
CrystalDiskMark  (874)  
Tera Term  (825)  
CotEditor  (626)  
FFFTP  (593)  
えこでこツール  (532)  
10  ffdshow  (524)  
11  SMPlayer  (503)  
12  Cabos  (492)  
13  ギコナビ  (475)  
14  Rappelz Server  (471)  
15  MergeDoc  (457)  
More >>

最近ブックマークされた記事

マルチコアCPUを活用したファイル圧縮

2008年02月15日 11:34 Ben-Martin(2008年2月13日(水)) 1 2 3
 デスクトップ・コンピューターに搭載されているCPUのコアは2個から4個、やがては8個へと増加の一途だ。それに応じてソフトウェアが計算量の大きな処理を並列処理する能力の重要性も増している。圧縮関連のツールでは、 mgzip pbzip2 がマルチコアに対応しており、前者は圧縮処理に、後者は圧縮とその復元処理にマルチコアを活用することができる。

 どちらの場合も、圧縮ファイルの復元は、それぞれの標準ツールで可能だ。つまり、pbzip2の圧縮ファイルにはbzip2を、mgzipの圧縮ファイルにはgunzipを使う。Fedora 8の場合、pbzip2のパッケージが標準リポジトリーにあり「yum install pbzip2」でインストール可能。一方、mgzipは、ほとんどのディストリビューションでパッケージがなく、ソースからインストールする必要がある。

 しかも、コンパイルでエラーが発生する。zlibヘッダーにはgz_headerが定義されているが、mgzip.cでも同じ変数が正当なgzipアーカイブの16進値を保持するために使われているからだ。

$ make
gcc  -g -O2   -c -o mgzip.o mgzip.c
mgzip.c:40: error: 'gz_header' redeclared as different kind of symbol
/usr/include/zlib.h:124: error: previous declaration of 'gz_header' was here
mgzip.c: In function 'compress_infile_to_outfile':
mgzip.c:530: warning: cast to pointer from integer of different size

 解決は簡単。gz_header変数にプレフィックスを付け、それに合わせてこの変数への参照を修正すればよい。参照はmgzip.cの中に数カ所にある。プレフィックスは、gz_header以外で適正なCの識別子であれば何でもよい。たとえば、mgzip_gz_headerなどとする。

最終更新:2008年04月16日 17:07