JP2005025637A - プログラム圧縮方法、プログラム解凍方法および圧縮プログラム - Google Patents
プログラム圧縮方法、プログラム解凍方法および圧縮プログラム Download PDFInfo
- Publication number
- JP2005025637A JP2005025637A JP2003192366A JP2003192366A JP2005025637A JP 2005025637 A JP2005025637 A JP 2005025637A JP 2003192366 A JP2003192366 A JP 2003192366A JP 2003192366 A JP2003192366 A JP 2003192366A JP 2005025637 A JP2005025637 A JP 2005025637A
- Authority
- JP
- Japan
- Prior art keywords
- data
- compression
- program
- procedure
- block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【解決手段】本発明のプログラム圧縮方法は、プログラムを所定のブロックサイズに分割するプログラム分割手順と、分割したブロックに含まれる条件コードの出現率を求める出現率算出手順と、その出現率が予め設定した閾値を超えるとき命令ブロックとして命令コード圧縮に適したアルゴリズムで圧縮し、そうでないときはデータ圧縮に適したアルゴリズムで圧縮する選択圧縮手順とで構成する。
【選択図】 図1
Description
【発明の属する技術分野】
本発明は、携帯電話等の携帯情報端末において、ファームウェアとして格納されるプログラムコードの圧縮方法およびその解凍方法に関する。
【0002】
【従来の技術】
携帯電話の機能アップは著しいものがあり、2〜3年もすると陳腐化するまでになってきている。この機能アップに伴い、プログラムサイズも拡大の一途をたどっておりファームウェアとして格納されるメモリコストを押し上げる要因になっている。このため、プログラムを圧縮することでプログラム格納メモリを小さくでき、容量が小さなメモリを使用することによりメモリコストの引き下げを図ることが行われている。
【0003】
プログラムは一般に命令を実行する命令コード領域と数値データ等を格納するデータ領域から構成されるが、プログラム圧縮はこれら領域に関係なく高い圧縮率で圧縮できることが望まれる。しかし圧縮を行うアルゴリズムは何らかの規則性に基づいて圧縮を行うため、命令コード領域とデータ領域とに共通する規則性がないか、あるいは少ないため一つのアルゴリズムで高い圧縮率で圧縮を行うことは現実には困難である。本願発明の出願人は、携帯電話やPDA(Personal Digital Assistant)などの携帯情報端末に多く使用されているARM系のRISCプロセッサ(例えば、非特許文献1参照)におけるプログラムの命令コード領域の圧縮/解凍方法を先に提案している(特許文献1参照)。
【0004】
一般的にデータ圧縮法としてランレングス圧縮(例えば、非特許文献2参照)が知られている。これは圧縮対象のデータ中において「同じデータパターンpが繰り返しn回発生する部分」を「p×n」と置き換える圧縮である。解凍の処理もpをn回出力するという簡単な処理であり、CPUの処理能力の低い装置でも容易かつ高速に実行できる、と言う特徴を持っている。
【0005】
【特許文献1】
特許2003−52306
【0006】
【非特許文献1】
ARMプロダクトインフォメーション、[online]、アーム株式会社、[平成15年6月6日検索]、インターネット< http://www.jp.arm.com/kk/kk _product.html>
【0007】
【非特許文献2】
データ圧縮について、[online]、だうぴ、[平成15年6月6日検索]、インターネット< http://www.ann.hi−ho.ne.jp/jiro/assyuku2.htm>
【0008】
【発明が解決しようとする課題】
上記で述べたように、本願発明の出願人はプログラムの命令コード領域に対する圧縮方法を先に提案したが、この圧縮方法はデータ領域に対して適用できるものではなかった。
また、データの圧縮方法として知られているランレングス圧縮で圧縮可能なのは「同じパターンが連続して発生する」部分であり、プログラムのデータ領域においてランレングス圧縮が利用できる部分は限られていた。即ち、データ中に見られる等差数列のパターンや、同じパターンの等差数列パターンのようなデータでは、単純な繰り返しパターンとはならずランレングス圧縮が出来ないからである。このような構造はデータテーブルや配列要素をメモリ上に展開すると発生するものであり、一般的なデータ領域では良く見られるものである。そして、このような構造のデータ領域はプログラム中に散在し、その配置や領域サイズはプログラムによって異なるのが一般的である。
【0009】
例えば、構造体Sのメンバが
である場合、この構造体Sの要素番号Aやインデックス文字Bは一定間隔で単調増加することが期待できるし、ポインタCは隣接する配列要素での文字列格納領域が比較的近い(=ポインタアドレスを示すデータがほぼ等しい)ことが予想される。しかし、構造体Sはメモリ中には図4に示すような形で記録されるため、従来のランレングス圧縮では圧縮対象にできない、と言う問題があった。
【0010】
本発明の目的は、ARM系のプロセッサのプログラムにおいて、命令コード領域とデータ領域とが混在する場合のプログラム圧縮方法を提案するとともに、ランレングス圧縮上での問題を解決してプログラムのデータ領域の圧縮にランレングス圧縮を適用する方法を提案することにある。
【0011】
【課題を解決するための手段】
上記課題を解決するため、本発明のプログラム圧縮方法およびプログラム解凍方法は以下のように構成される。
(1)第1の発明
第1の発明は、ARM系のプロセッサのプログラムコード中に混在する命令コード領域とデータ領域とをそれぞれに適した圧縮方法で圧縮するものである。
【0012】
その原理を図1を用いて説明する。第1の発明は、図1に示すようにプログラム分割手順1、出現率算出手順2および選択圧縮手順3から成る。
プログラム分割手順1は、圧縮対象とするプログラムを所定のサイズのブロックに分割する。所定のサイズとは、例えば数KB(キロバイト)から数十KBである。
【0013】
出現率算出手順2は、所定の条件コードの出現率を分割した各ブロックに対して求めることを行う。例えば、ARM32ビット命令語セットにおける命令実行条件指定部の「Always(常に実行)」と言う条件コードの出現率を算出する。
選択圧縮手順3は、各ブロックで求めた条件コードの出現率が予め設定した閾値を超えるようであればそのブロックが命令コードが多数を占めると判断して命令コードの圧縮に向いた圧縮方法で圧縮を行う。もし、出現率が閾値より低ければデータ領域と見なして、データ領域の圧縮に向いた方法で圧縮を行う。
【0014】
第1の発明によれば、圧縮対象のプログラムを構成する部分に対して適した圧縮方法で圧縮が可能となり、高い圧縮率を得ることができる。
(2)第2の発明
第2の発明は、プログラムのデータ領域をランレングス圧縮により圧縮するものである。
【0015】
その原理を図2を用いて説明する。第2の発明は、図2に示すように配置変換手順4、差分データ置換手順5およびランレングス圧縮手順6から成る。
配置変換手順4は、圧縮対象のデータ領域のデータを配列構造の配列要素バイト数単位に1バイトづつを取り出し、並び替えることを行う。ここで配列要素バイト数とは、例えば構造体のメンバがA、B、*Cでそれぞれ整数(2バイト)、文字(1バイト)、ポインタ(4バイト)であるとき、それぞれのバイト数を合わせた7バイトが配列要素バイト数である。従ってこの場合、データ領域のデータを7バイト置きに1バイトづつ取り出し順次配置することを行う。
【0016】
差分データ置換手順5は、配置変換手順4で配置変換されたデータに対して、個々のデータをそれ自身のデータの値と1つ前に隣接するデータの値との差分を算出してその値(差分データ)に置き換えることを行う。即ち、n番目のデータD(n)はD(n)−D(n−1)のデータに置き換えられる。
ランレングス圧縮手順6は、置き換えたデータに対してランレングス圧縮を行う。圧縮後のデータは、差分データの値とその繰り返し個数をセットとしたデータの羅列となる。
【0017】
第2の発明によれば、プログラムのデータ領域に格納されるデータの特異性(配列要素を繰り返しの単位として等差数列的に格納される場合が多い)を利用してランレングス圧縮により圧縮することが可能となる。
(3)第3の発明
第3の発明は、第2の発明で圧縮したプログラムのデータ領域を解凍する方法である。
【0018】
第3の発明は、図3に示すようにランレングス解凍手順7、差分データ復元手順8および配置復元手順9から成る。
ランレングス解凍手順7は、圧縮されたデータのランレングス解凍を行う。即ち、ランレングス圧縮されたデータはデータ値と繰り返し個数をセットとして持っているので、全てデータ値となるように展開する。
【0019】
差分データ復元手順8は、ランレングス解凍手順7で展開されたデータに対して、個々のデータをそのデータの1つ前に隣接したデータの値を加え、このデータを自身のデータと置き換えることを行う。ランレングス解凍したデータは前述した差分値のデータとなっているので、1つ前のデータを加算することにより差分値のデータを復元したことになる。即ち、n番目のデータD(n)は、D(n)+D(n−1)と置き換えられる。
【0020】
配置復元手順9は、差分データ復元手順8で得られたデータを配列構造の配列要素バイト数に等しい単位で1バイトづつを取り出して配置することを順次行う。配列要素バイト数は前述した第2の発明と同様であり、このバイト数が7バイトであった場合、差分データ復元手順8で得られたデータを7バイト置きに1バイトづつを取り出し配置する。これにより圧縮前のデータが復元されたことになる。
【0021】
第3の発明によれば、ランレングス圧縮されたプログラムのデータ領域の解凍が可能となる。
第4の発明は、第1の発明のプログラムである。第4の発明によれば、圧縮対象のプログラムを構成する部分に対して適した圧縮方法で圧縮が可能となり、高い圧縮率が計れる圧縮プログラムの提供ができる。
【0022】
第5の発明は、第2の発明のプログラムである。第5の発明によれば、圧縮対象のプログラムのデータ領域をランレングス圧縮できる圧縮プログラムの提供が可能となる。
【0023】
【発明の実施の形態】
次に、本発明について図5から図18を参照して実施形態を説明する。
(実施形態その1)
実施形態その1は、第1の発明を具現化する例である。即ち、プログラム全体を命令コード領域とデータ領域とに分け、それぞれに適した圧縮方法にて圧縮を行うものである。
【0024】
図5はこの処理のフローを示すもので、圧縮対象のプログラムは複数のブロックに分割されており、このブロックを読み込みブロックと称する。また、圧縮したデータを書き込むための書き込みブロックを別途用意しておくものとする。これらのブロックは、コンピュータのメモリ上に展開または領域として確保されるものである。
【0025】
まず、読み込みブロックおよび書き込みブロックのポインタを初期化しておく。即ち、読み込みブロックのポインタPrbを圧縮対象のプログラムの先頭ブロックのアドレスRbにセットする。また、メモリ上に確保した書き込みブロックの先頭アドレスWbを書き込みブロックのポインタPwbにセットする。続いて、命令コード領域とデータ領域との分別を行う閾値Cpを設定する。この閾値は人手により入力された値を設定するものであるが、例えば携帯情報端末のARM系のプロセッサを用いた実機プログラムを測定して条件コード”Always”の出現分布を見ると図6のようであった場合、出現率70%を閾値として用いることで、命令コード領域とデータ領域とを分別することが可能である。即ち、ブロック内の条件コードの出現率が70%を超えている場合は、そのブロック内は大半が命令コードで満たされており、70%以下の場合はデータ領域とみることができる。(S101〜S103)。
【0026】
圧縮対象プログラムを分割した読み込みブロック内の条件コード”Always”の出現率Caを算出する(条件コード出現率はCa=fCa(Prb)と表すことができる)。求めた出現率Caと先に設定した閾値Cp(即ち、70%)とを比較し、Caが大きければそのブロックは命令コードの領域と見なし、命令コードの圧縮ヘッダを書き込みブロックに出力する。続いて、命令コードに適した圧縮方法(例えば、本願出願人が先に特許文献1で提案した方法)で読み込みブロックのプログラムを圧縮し、その結果を書き込みブロックに出力する。
【0027】
条件コードの出現率Caが閾値Cpより小さいときは読み込みブロックのプログラムをデータ領域と見なし、データの圧縮ヘッダ書き込みブロックに出力する。続いて、データの圧縮に適した圧縮方法(例えば、後述する実施形態その2の方法)で読み込みブロックのプログラムを圧縮し、その結果を書き込みブロックに出力する。
【0028】
読み込みポインタおよび書き込みポインタを更新し、圧縮対象プログラムの全ブロックに対して圧縮完了しているかどうかをチェックする。完了していなければ、更新された読み込みポインタの示すブロックの条件コードの出現率を算出する処理に戻る。全ブロックの圧縮完了が確認されれば終了となる。(S104〜S111)。
【0029】
(実施形態その2)
実施形態その2は、第2の発明を具現化する例である。即ち、プログラムのデータ領域の圧縮を行うものである。
本実施形態で用いる配列構造のデータは例えば図4に示すような配置でメモリ中に展開されているものとする。即ち、構造体Sの一つの配列要素がqバイトとするとデータのサイズMはq×nバイトであり、メモリ中ではqバイト置きに配列要素が並べられた配置となっている。データ領域の圧縮はこのデータを圧縮することである。
【0030】
次に、データ領域の圧縮アルゴリズムの処理フローを図7を用いて説明する。図7において、データの配列M[1,2,…,nq]をM’[1,q+1,2q+1,…,nq−1,nq]と配置変換する。即ち、データの配列をqバイト置きに1バイトづつを取り上げ並べ替えることを行う。このことは図4に並べられたデータを図8(a)に示すようにqバイト置きに1バイトのデータを取り出し、同図(b)に示すように取り出したデータを順に並べることを行っている。次に並び替えたデータに対して、1つ前のデータとの差分を求め置き換えることを行う。但し、先頭のデータはそのままとし、先頭から2番目のデータ以降のデータについてこの処理を行う。即ち、M”[1]=M’[1]として、i=2〜nqに対してM”[i]=M’[i]−M’[i−1]を行う。このM”をランレングス圧縮して圧縮データRを得る。(S201〜S204)。
【0031】
次にランレングス圧縮の処理フロー例を図9を用いて説明する。ここでは、指定エリア内のデータにおいて同一データが連続する部分を検出して、繰り返しデータと繰り返し回数を示すデータに置換するものである。
まず、圧縮対象エリアM(先頭アドレスMa、サイズMs)に対する読み込みポインタPmaの初期化(Pma=Ma)、および圧縮データ格納エリアR(先頭アドレRa)に対する書き込みポインタPraの初期化(Pra=Ra)を行う。続いて、圧縮データ格納エリアRに「ランレングス圧縮開始マークデータRms」、「エリアサイズMs」および「配列要素バイト数q」を書き込み、書き込みポインタPraを更新する。(S301〜S303)。
【0032】
読み込みポインタ位置のデータM[Pma]が、Pma以降M[Pma],M[Pma+1],M[Pma+2],…M[Pma+nq]において連続する回数Pmanを求める。Pman>2なら圧縮可能の部位と判断して圧縮データ格納エリアRに「圧縮マークデータRm」「繰り返し回数Pman」「繰り返しデータM[Pma]」を書き込み、書き込みポインタPraの更新および読み込みポインタPmaの更新を行う。Pman>2でなければ圧縮不可能の部位と判断して圧縮データ格納エリアRにM[Pma]を書き込み、書き込みポインタPraの更新、および読み込みポインタPmaの更新(Pma=Pma+1)を行う。
【0033】
更新を行った読み込みポインタPmaの値が「圧縮対象エリアの先頭アドレスMa+サイズMs」より小さければこの処理(S304〜S309)を繰り返し、そうでなければ圧縮終了となる。(S304〜S310)。
以上の圧縮動作を具体的なデータに対して行った例を図10と図11で説明する。図10(a)のように3つのメンバからなる構造体Sを定義し、図10(b)のように構造体配列S[]に数値を代入したとき、S[]のそれぞれの値は16進表記で図10(c)のようになり、メモリ中では図10(d)のようになる(M)。図10(d)の数列は普通のランレングス圧縮では圧縮効果が現れにくい形である。
【0034】
これを構造体Sの配列要素のサイズ(7バイト)で折り返し表示すると図11(e)のようになり、図7の圧縮アルゴリズムのS201の操作(配置変換)により図11(f)の形になる(M’)。さらに図7の圧縮アルゴリズムのS203の操作(差分作成)を行うと図11(g)の形になり、同じ数値が連続する状態になる(M”)。最後に図7の圧縮アルゴリズムのS204の操作(ランレングス圧縮)により図11(h)の形になる(R)。
【0035】
繰り返し回数表記を1バイトで記述できたとすると、このデータの場合は圧縮前に42バイトあったものを20バイトに圧縮できた(実際にはヘッダや圧縮マークが入るのでその分が増える)。
(実施形態その3)
実施形態その2の圧縮アルゴリズムではMを一旦M’に配置変換しているが、図7のS202〜S204において、メモリアクセスポインタをS201と同様のアドレス変換を施すことにより、S201の工程とM’作成に要するワークメモリを省略することができる。この圧縮のアルゴリズムの1例を図12に示す。
【0036】
まず、M”[1]=M[1]とし、続いてi=1〜q、j=1〜nに対して、M”[(i−1)*n+j]=M[i+(j−2)*q]−M[i+(j−1)*q]の演算を行う。即ち、Mから配置変換と差分算出とを同時に行って直接M”を求めることを行う。そして、求めたM”をランレングス圧縮して圧縮データRを得るものである。ランレングス圧縮は図9に示すフローで行える。(S401〜S403)。
【0037】
(実施形態その4)
実施形態その4は、第3の発明を具現化する例である。即ち、ランレングス圧縮されたプログラムのデータ領域の解凍を行うものである。
図13は解凍のアルゴリズムを示す処理フローを示すもので、まず圧縮されたプログラムのランレングス解凍(ここでは後述する差分型ランレングス解凍と区別するため、通常型ランレングス解凍と称す)を行って差分データ(M”)を得る。次に差分の復元を行うが、先頭のデータはそのままとして(即ち,差分復元データをM’とすると、M’[1]=M”[1])、先頭から2番目のデータを先頭のデータの値に加えてその値に置き換える。この処理を順次データ個数分行う(即ち、M’[i]=M”[i]+M”[i−1]。但し、i=2〜np)。次に、配置要素のバイト数(q)置きに1バイトづつデータを取り出して並び変えることを行う(即ち、M’[1,2,…,nq]をM[1,q+1,2q+1,…,nq−1,nq]と配置変換する)。(S501〜S504)。
【0038】
次に、前述した通常型ランレングス解凍の処理フローを図14を用いて説明する。図14において、圧縮データ格納エリアR(先頭アドレスRa)に対する読み込みポインタPraの初期化(即ち、Pra=Ra)、および展開データ格納エリアM(先頭アドレスMa)に対する書き込みポインタPmaの初期化(即ち、Pma=Ma)を行う。続いて、圧縮データ格納エリアRから「ランレングス圧縮開始マークデータRms」「エリアサイズMs」「配列要素バイト数q」を読み込み、読み込みポインタPraを更新する。(S601〜S603)。
【0039】
読み込みポインタPraの示す位置データR[Pra]が圧縮マークデータRmであった場合、繰り返し回数Pmanと繰り返しデータDを読み込んで読み込みポインタPraを更新する。得られたPmanとDにより、MにデータDをPman回書き込んで書き込みポインタPmaを更新する。
読み込みポインタPraの示す一のデータが圧縮マークデータRmでなかった場合、非圧縮データと判断してMにR[Pra]を書き込み、書き込みポインタPraを更新(Pra=Pra+1)する。
【0040】
読み込みポインタPraが解凍対象とするデータの最終データを示す位置(Ra+Rs)でなければこの処理を繰り返す。(S604〜S609)。
(実施形態その5)
実施形態その4では、差分データM”および配置変換のデータM’の作成を行っているが、図13のS501ステップのランレングス解凍データ1 バイト毎にS503ステップの差分復元処理を行い、S504ステップ相当の配置換を施してMに格納することにより、M”およびM’の作成に要する処理とワークメモリを省略できる。この解凍アルゴリズム(ここでは、差分型ランレングス解凍と称す)の例を図15および図16に示す。
【0041】
図15に示すように、差分型ランレングス解凍により中間のワークエリアを持つことなく直接解凍するものである。そのフローは図16に示すもので、S701〜S704は通常ランレングス解凍の処理フローである図14のS601〜S604と同一である。
S704で、読み込みポインタが示す位置のデータR[Pra]が圧縮マークデータRmであった場合に、繰り返し回数Pmanと繰り返しデータDを読み込み、繰り返しデータDをM[Pma]に書き込み(即ち、M[Pma]=R[Pra++])読み込みポインタPraを更新する。続いて、繰り返しデータDをq個置きに直前のデータを差分として加算しながら書き込む(即ち、M[Pma+i*q]=M[Pma+i*q]+M[Pma+(i−1)*q]。但し、i=1〜Pman−1)。書き込みポインタPmaをPman×qの分加えて更新する。
【0042】
S704で、読み込みポインタが示す位置のデータR[Pra]が圧縮マークデータRmでなかった場合は、非圧縮データと判断してM[Pma]にR[Pra]を書き込み、書き込みポインタPmaおよび読み込みポインタPraを更新(即ち、Pma=Pma+q。Pra=Pra+1)する。
以降読み込みポインタPraがRa+Rsになるまで繰り返し、解凍する対象のデータなくなれば終了する。(S704〜S710)。
【0043】
(実施形態その6)
実施形態その2およびその3の圧縮工程においては、あらかじめ配列構造の位置とサイズが指定されていたが、実際にはメモリ中のどこにどのようなデータが配置されているかが不明なことが多い。これに対応するため、メモリ中から圧縮可能な領域を検出する手段が必要である。実施形態その6では、領域検出方法として、メモリM全体をサイズdMsの小ブロックに分割し、各ブロック毎に配列要素のバイトサイズq対圧縮率Cの関係を評価する。これにより圧縮率最良となるqを選択することができる。領域検出アルゴリズムを加えた圧縮の一例を図17に示す。
【0044】
図17において、領域検出開始アドレスSaを読み込みポインタPsおよび検出済ポインタSpに設定し、検出済サイズSsおよび検出済幅Qppを0に初期化する。続いて、読み込みポインタPsから領域dMsに対し、配列要素サイズx(x:1〜qmax)と設定したときの圧縮サイズdMss(x)を求める。また、このときの配列要素サイズをxminとする。
【0045】
圧縮サイズが最小となるdMss[xmin]が元のサイズdMsより小さいとき、圧縮効果があると判断する。そして、更に検出したxminが検出済幅Qppと等しい場合、今回検出したブロックは前回までに検出したブロックの続きであると判断して検出サイズSsに領域dMsを追加する(Ss=Ss+dMs)。
【0046】
検出したxminが検出済幅Qppと異なる場合、新たなブロックと判断して、検出済幅Qpp<>0ならば前回検出のブロックを圧縮対象とし(Sp、Ss、Qppを圧縮ルーチンに通知)、検知済パラメータを更新(Sp=Ps、Ss=dMs、Qpp=xmin)する。
いずれのxに対しても圧縮サイズdMss[xmin]>=dMsである場合は圧縮効果無しと判断し、検出済幅Qpp<>0ならば前回検出のブロックを圧縮対象とし(Sp、Ss、Qppを圧縮ルーチンに通知)、検知済パラメータを初期化(Qpp=0)する。そして、読み込みポインタPsを更新(Ps=Ps+dMs)し、全領域終了までS802以降を繰り返す。(S801〜S813)。
【0047】
上記のアルゴリズムによれば、連続する小ブロックで検出した要素サイズxminが等しい場合、これら連続するブロックを連結して1つのブロックとして扱えるようにしている(図18参照)。これにより全体のブロック分割数を減少させることができ、ブロック記述ヘッダ部の数を減らすことで圧縮効率を向上させ、かつ解凍処理時にヘッダ部処理回数を減らすことで解凍処理を高速化できる。
【0048】
(付記1) 所定の条件コードを含む命令語セットで記述されるプログラムコードのプログラム圧縮方法であって、
プログラムコードを所定のサイズのブロックに分割するプログラム分割手順と、
前記ブロックに含まれる前記条件コードの出現率を求める出現率算出手順と、
前記出現率が予め設定した閾値を超えるときは前記ブロックを命令ブロックとして命令コード圧縮に適したアルゴリズムで圧縮し、前記出現率が前記閾値を超えないときはデータブロックとしてデータ圧縮に適したアルゴリズムで圧縮する選択圧縮手順と
を有することを特徴とするプログラム圧縮方法。
【0049】
(付記2) プログラムコード中における配列構造を成すデータ領域を圧縮するプログラム圧縮方法であって、
前記データ領域に配置しているデータを、前記配列構造の配列要素バイト数単位に1バイトづつを取り出して配置変換する配置変換手順と、
前記配置変換されたデータに対して、個々のデータを該データの1つ前のデータとの差分を求め、該差分のデータに置き換える差分データ置換手順と、
該差分のデータに置き換えたデータに対してランレングス圧縮を行うランレングス圧縮手順と
を有することを特徴とするプログラム圧縮方法。
【0050】
(付記3) プログラムコード中におけるランレングス圧縮された配列構造をなすデータ領域のプログラム解凍方法であって、
圧縮された前記データ領域のデータに対してランレングス解凍を行うランレングス解凍手順と、
前記ランレングス解凍されたデータに対して、個々のデータを該データの1つ前のデータを加えたデータに置き換える差分データ復元手順と、
前記差分データ復元手順により置き換えられたデータを、前記配列構造の配列要素バイト数単位に1バイトづつを取り出して配置し直す配置復元手順と
を有することを特徴とするプログラム解凍方法。
【0051】
(付記4) 所定の条件コードを含む命令語セットで記述されるプログラムコードの圧縮プログラムであって、
プログラムコードを所定のサイズのブロックに分割するプログラム分割手順と、
前記ブロックに含まれる前記条件コードの出現率を求める出現率算出手順と、
前記出現率が予め設定した閾値を超えるときは前記ブロックを命令ブロックとして命令コード圧縮に適したアルゴリズムで圧縮し、前記出現率が前記閾値を超えないときはデータブロックとしてデータ圧縮に適したアルゴリズムで圧縮する選択圧縮手順と
をコンピュータに実行させるための圧縮プログラム。
【0052】
(付記5) プログラムコード中における配列構造を成すデータ領域を圧縮する圧縮プログラムであって、
前記データ領域に配置しているデータを、前記配列構造の配列要素バイト数単位に1バイトづつを取り出して配置変換する配置変換手順と、
前記配置変換されたデータに対して、個々のデータを該データの1つ前のデータとの差分を求め、該差分のデータに置き換える差分データ置換手順と、
該差分のデータに置き換えたデータに対してランレングス圧縮を行うランレングス圧縮手順と
をコンピュータに実行させるための圧縮プログラム。
【0053】
(付記6) 付記2のプログラム圧縮方法であって、
圧縮対象のプログラムを所定サイズのブロックに分割し、該ブロックに対して複数個指定された前記配列要素バイト数毎にランレングス圧縮を行い、最も高い圧縮率を示した該配列要素バイト数の圧縮を採用する
ことを特徴とするプログラム圧縮方法。
【0054】
【発明の効果】
本発明によれば、携帯情報端末等のプログラムを高い圧縮率で圧縮でき、メモリコストを下げることができる。また、本解凍アルゴリズムは低いCPU負荷で解凍で高速解凍が可能であり、バッテリィ寿命を損なうものではない。
【図面の簡単な説明】
【図1】第1の発明の原理図である。
【図2】第2の発明の原理図である。
【図3】第3の発明の原理図である。
【図4】配列構造のデータ配置例である。
【図5】実施形態その1の圧縮の処理フロー例である。
【図6】「Always」条件コードの含有率分布例である。
【図7】実施形態その2の圧縮の処理フロー例である。
【図8】データ配列の配置変換説明図である。
【図9】ランレングス圧縮の処理フロー例である。
【図10】実施形態その2 における具体的データ例(その1)である。
【図11】実施形態その2 における具体的データ例(その2)である
【図12】実施形態その3の圧縮の処理フロー例である。
【図13】実施形態その4の解凍の処理フロー例である。
【図14】実施形態その4の通常型ランレングス解凍の処理フロー例である。
【図15】実施形態その5の差分型ランレングス解凍の処理フロー例(その1)である。
【図16】実施形態その5の差分型ランレングス解凍の処理フロー例(その2)である。
【図17】実施形態その6の圧縮対象領域検出処理付き圧縮フロー例である。
【図18】実施形態その6における配列要素サイズが等しい小ブロックを一体化した例である。
【符号の説明】
1:プログラム分割手順
2:出現率算出手順
3:選択圧縮手順
4:配置変換手順
5:差分データ置換手順
6:ランレングス圧縮手順
7:ランレングス解凍手順
8:差分データ復元手順
9:配置復元手順
Claims (5)
- 所定の条件コードを含む命令語セットで記述されるプログラムコードのプログラム圧縮方法であって、
プログラムコードを所定のサイズのブロックに分割するプログラム分割手順と、
前記ブロックに含まれる前記条件コードの出現率を求める出現率算出手順と、
前記出現率が予め設定した閾値を超えるときは前記ブロックを命令ブロックとして命令コード圧縮に適したアルゴリズムで圧縮し、前記出現率が前記閾値を超えないときはデータブロックとしてデータ圧縮に適したアルゴリズムで圧縮する選択圧縮手順と
を有することを特徴とするプログラム圧縮方法。 - プログラムコード中における配列構造を成すデータ領域を圧縮するプログラム圧縮方法であって、
前記データ領域に配置しているデータを、前記配列構造の配列要素バイト数単位に1バイトづつを取り出して配置変換する配置変換手順と、
前記配置変換されたデータに対して、個々のデータを該データの1つ前のデータとの差分を求め、該差分のデータに置き換える差分データ置換手順と、
該差分のデータに置き換えたデータに対してランレングス圧縮を行うランレングス圧縮手順と
を有することを特徴とするプログラム圧縮方法。 - プログラムコード中におけるランレングス圧縮された配列構造をなすデータ領域のプログラム解凍方法であって、
圧縮された前記データ領域のデータに対してランレングス解凍を行うランレングス解凍手順と、
前記ランレングス解凍されたデータに対して、個々のデータを該データの1つ前のデータを加えたデータに置き換える差分データ復元手順と、
前記差分データ復元手順により置き換えられたデータを、前記配列構造の配列要素バイト数単位に1バイトづつを取り出して配置し直す配置復元手順と
を有することを特徴とするプログラム解凍方法。 - 所定の条件コードを含む命令語セットで記述されるプログラムコードの圧縮プログラムであって、
プログラムコードを所定のサイズのブロックに分割するプログラム分割手順と、
前記ブロックに含まれる前記条件コードの出現率を求める出現率算出手順と、
前記出現率が予め設定した閾値を超えるときは前記ブロックを命令ブロックとして命令コード圧縮に適したアルゴリズムで圧縮し、前記出現率が前記閾値を超えないときはデータブロックとしてデータ圧縮に適したアルゴリズムで圧縮する選択圧縮手順と
をコンピュータに実行させるための圧縮プログラム。 - プログラムコード中における配列構造を成すデータ領域を圧縮する圧縮プログラムであって、
前記データ領域に配置しているデータを、前記配列構造の配列要素バイト数単位に1バイトづつを取り出して配置変換する配置変換手順と、
前記配置変換されたデータに対して、個々のデータを該データの1つ前のデータとの差分を求め、該差分のデータに置き換える差分データ置換手順と、
該差分のデータに置き換えたデータに対してランレングス圧縮を行うランレングス圧縮手順と
をコンピュータに実行させるための圧縮プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003192366A JP4352785B2 (ja) | 2003-07-04 | 2003-07-04 | プログラム圧縮方法、プログラム解凍方法および圧縮プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003192366A JP4352785B2 (ja) | 2003-07-04 | 2003-07-04 | プログラム圧縮方法、プログラム解凍方法および圧縮プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2005025637A true JP2005025637A (ja) | 2005-01-27 |
JP4352785B2 JP4352785B2 (ja) | 2009-10-28 |
Family
ID=34189691
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003192366A Expired - Fee Related JP4352785B2 (ja) | 2003-07-04 | 2003-07-04 | プログラム圧縮方法、プログラム解凍方法および圧縮プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4352785B2 (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008257474A (ja) * | 2007-04-04 | 2008-10-23 | Oki Electric Ind Co Ltd | データ圧縮装置、データ併合装置、データ整序装置、データ統合システム、無線タグデータ統合システム、データ圧縮プログラム、データ併合プログラム及びデータ整序プログラム |
JP2010187773A (ja) * | 2009-02-16 | 2010-09-02 | Sankyo Co Ltd | スロットマシン |
JP2013248511A (ja) * | 2013-08-06 | 2013-12-12 | Sankyo Co Ltd | スロットマシン |
-
2003
- 2003-07-04 JP JP2003192366A patent/JP4352785B2/ja not_active Expired - Fee Related
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008257474A (ja) * | 2007-04-04 | 2008-10-23 | Oki Electric Ind Co Ltd | データ圧縮装置、データ併合装置、データ整序装置、データ統合システム、無線タグデータ統合システム、データ圧縮プログラム、データ併合プログラム及びデータ整序プログラム |
JP2010187773A (ja) * | 2009-02-16 | 2010-09-02 | Sankyo Co Ltd | スロットマシン |
JP2013248511A (ja) * | 2013-08-06 | 2013-12-12 | Sankyo Co Ltd | スロットマシン |
Also Published As
Publication number | Publication date |
---|---|
JP4352785B2 (ja) | 2009-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8090027B2 (en) | Data compression using an arbitrary-sized dictionary | |
US7725678B2 (en) | Method and apparatus for producing an index vector for use in performing a vector permute operation | |
JP4814291B2 (ja) | データ圧縮装置および方法 | |
JP4999025B2 (ja) | データ圧縮及び復元装置、並びに方法 | |
CN104040541A (zh) | 用于更高效地使用存储器至cpu带宽的技术 | |
KR102152346B1 (ko) | 이미지 파일의 블록 간 차이를 통한 압축율 향상 방법 및 시스템 | |
KR20160001652A (ko) | 데이터 프로세싱 방법 및 디바이스 | |
CN111491169B (zh) | 一种数字图像压缩方法、装置、设备、介质 | |
JP4189443B2 (ja) | グラフィックス画像の圧縮及び逆圧縮方法 | |
JP4352785B2 (ja) | プログラム圧縮方法、プログラム解凍方法および圧縮プログラム | |
JP3201716B2 (ja) | コンピュータ装置 | |
JP5549177B2 (ja) | 圧縮プログラム、方法及び装置、並びに解凍プログラム、方法及び装置 | |
JP3488160B2 (ja) | 命令セットの拡張を通じて、risc実行可能コードを圧縮する方法及びシステム | |
KR102185668B1 (ko) | 이미지 파일의 픽셀 변환을 통한 압축율 향상 방법 및 시스템 | |
US20120311304A1 (en) | Processor, computer product, compression apparatus, and compression method | |
JP5029684B2 (ja) | パターンマッチング方法及びプログラム | |
US9054730B2 (en) | Method and system for LZW based decompression | |
De Agostino | The greedy approach to dictionary-based static text compression on a distributed system | |
JP6687700B2 (ja) | 情報処理装置、情報処理方法およびプログラム | |
Bentley | The high complexity jump-counting pattern | |
CN117375627A (zh) | 适用于字符串的纯文本格式数据的无损压缩方法和系统 | |
CN112988685A (zh) | 数据压缩和解压缩方法及其装置 | |
JP2006270330A (ja) | 可変長符号復号回路 | |
JP2008124632A (ja) | 画像符号化装置、画像復号装置、画像符号化方法、画像復号方法、画像符号化プログラム、画像復号プログラム、画像符号化プログラムを記録した記録媒体、および画像復号プログラムを記録した記録媒体 | |
JP2003318739A (ja) | データシーケンスを圧縮するシステム、方法、およびコンピュータ読み取り可能媒体 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060627 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090120 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090316 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20090707 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20090720 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120807 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120807 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130807 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |