JP2000339172A - メモリ効率化方法 - Google Patents

メモリ効率化方法

Info

Publication number
JP2000339172A
JP2000339172A JP11150552A JP15055299A JP2000339172A JP 2000339172 A JP2000339172 A JP 2000339172A JP 11150552 A JP11150552 A JP 11150552A JP 15055299 A JP15055299 A JP 15055299A JP 2000339172 A JP2000339172 A JP 2000339172A
Authority
JP
Japan
Prior art keywords
variable
variables
memory
program
type
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.)
Pending
Application number
JP11150552A
Other languages
English (en)
Inventor
Aya Sakashita
亜矢 坂下
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP11150552A priority Critical patent/JP2000339172A/ja
Publication of JP2000339172A publication Critical patent/JP2000339172A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 プログラム言語処理装置において、変数の最
適な型を機械的に決定することができ、その結果メモリ
を効率良く使用することができるメモリ効率化方法を提
供すること。 【解決手段】 原始プログラムから目的プログラムを生
成するプログラム言語処理装置において、変数が取り得
る値若しくは値の範囲から、該変数の最適な型を決定す
ることで、メモリ上に割り当てられる変数領域を最適な
サイズにすることができ、その結果メモリを効率良く使
用することができる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、計算機の原始プロ
グラムから目的プログラムを生成するプログラム言語処
理装置において、特に変数の持つ値により変数の属性を
最適な型に決定することで、メモリの利用効率を向上さ
せるメモリ効率化方法に関する。
【0002】
【従来の技術】プログラムにおいて、変数はプログラム
の流れに従って値の変化するデータであり、プログラム
の実行の際には記憶装置(メモリ)の番地に対応する。
変数に対し型の概念を導入しており、その型の大きさが
静的でかつ不変であるプログラム言語処理装置は、変数
の属性(型やサイズ)をプログラムを作成する際に決定
する。従ってプログラム作成時に決定した属性に応じた
大きさで、個々の変数領域がメモリ上に割り当てられ
る。
【0003】
【発明が解決しようとする課題】プログラム作成者にと
ってプログラム作成時点において、変数が取り得る値の
範囲を把握することは困難である。そこでプログラム実
行時の桁あふれなどを防止するために、変数の属性をそ
の変数が取り得る値の桁数より大きく取っておく傾向に
ある。そのため、変数領域を割り当てるために必要以上
にメモリが使用され、ハードウェア資源を浪費する結果
を招いている。
【0004】ANSI Cに準拠したC言語を例に、プ
ログラム関数内で定義された変数がメモリ上でどのよう
に割り当てられるかを説明する。ここで説明する言語処
理装置が扱う型の大きさは、int型/short型が
16ビット、char型が8ビットとする。図12にプ
ログラム例を、図13に図12のプログラムにおいて使
用するメモリの状態を示す。
【0005】図12のプログラムにおいて、変数i、
j、kがそれぞれint型(16ビット)で定義されて
いる(S12)。この中で、変数iの取り得る値の範囲は
8から10、変数jの取り得る値の範囲は18から2
0、変数kの取り得る値の範囲は127から129であ
る。従って、メモリ上の領域が真に2バイト(16ビッ
ト)必要な変数な変数はkだけであって、変数i及び変
数jは2バイト確保された領域のうち実際には1バイト
(8ビット)分しか使われない。つまり、図13に示す
ように、メモリを無駄に消費していることになる。
【0006】そこで、本発明は、プログラム言語処理装
置において、変数の最適な型を機械的に決定することが
でき、その結果メモリを効率良く使用することができる
メモリ効率化方法を提供することを課題としている。
【0007】
【課題を解決するための手段】本発明者は上記課題につ
いて鋭意研究を重ねた結果、変数が取り得る値若しくは
値の範囲からその変数の最適な型を決定することによ
り、メモリ上に割り当てられる変数領域をを最適なサイ
ズにすることができ、その結果メモリを効率良く使用す
ることができることを見出し、これらの知見に基づいて
本発明を成すに至った。
【0008】すなわち、本発明は、原始プログラムから
目的プログラムを生成するプログラム言語処理装置にお
いて、変数が取り得る値若しくは値の範囲から、当該変
数の最適な型を決定することを特徴とするメモリ効率化
方法を提供する。
【0009】
【発明の実施の形態】以下、本発明の実施形態を図面に
基づいて説明する。
【0010】図1は、本発明に係るメモリ効率化方法を
一般的なプログラム言語処理装置に適用した一実施例の
システム構成図である。
【0011】図1に示すプログラム言語処理装置10
は、原始プログラムが格納された記憶装置11を入力と
し、翻訳手段13と、最適化手段14とを具備し、目的
プログラムを格納する記憶装置12を出力とする構成と
なっている。翻訳手段13は一般的なコンパイル機能群
であり、例えば構文解析、コード生成など(図示省略)
から構成される。最適化手段14は本発明のメモリ効率
化手段20を含み、メモリ効率化手段20は変数抽出手
段21と変数値解析手段22と変数値判定手段23と型
決定手段24とから構成される。
【0012】次に本発明のメモリ効率化方法をANSI
Cに準拠したC言語を例に、プログラム関数内で定義
された変数がメモリ上でどのように割り当てられるかを
説明する。ここで説明する言語処理装置が扱う型の大き
さは、int型/short型が16ビット、char
型が8ビットとする。
【0013】また、図2は本発明のメモリ効率化方法の
処理手順を表す流れ図である。
【0014】(第1実施例)図12のプログラムを例
に、図2の流れ図に従って本発明の処理を説明する。
【0015】図12で定義されている変数i、j、kは
いずれも、有効範囲が関数の中に特定されたローカル変
数であり、いずれの変数もint型で定義されている
(S12)。
【0016】まず、対象となる変数を抽出する。ここで
抽出されるのは、変数i、j、kである(step31/step
32)。
【0017】次に、抽出された変数i、j、kに対し、
各変数が取り得る値の範囲を解析する(step33)。この
中で、変数iの取り得る値の範囲は8から10、変数j
の取り得る値の範囲は18から20、変数kの取り得る
値の範囲は127から129である。
【0018】次に、解析した各変数の取り得る値の範囲
について、その範囲が1バイト(8ビット)で表現でき
る値か、2バイト(16ビット)必要な値かどうかを判
定する(step34)。変数i及び変数jは1バイト(8ビ
ット)あれば充分であり、変数kは2バイト(16ビッ
ト)必要である。
【0019】上記判定結果をもとに、各変数にとって最
適な型を決定する(step35)。変数i、jはchar
型、変数kはint型として決定する。
【0020】その結果、変数i、j、kのメモリ上への
割り当ては、図3のようになり、メモリが効率良く使用
されている。
【0021】(第2実施例)次に、ある限定条件を与
え、その限定条件を満足した変数のみについて、属性の
最適化を行う処理を、図4のプログラムを例に図2の流
れ図に従って説明する。
【0022】ここでは、限定条件を与える方法として、
変数の定義において属性(型)を定義する代わりにキー
ワードを付与し、そのキーワードの付与を限定条件とす
る例を説明する。
【0023】図4のプログラム例において、変数i、k
には属性の代わりに「INTEGER」というキーワー
ドが付与されており、変数jにはキーワードは付与され
ていない(S4)。
【0024】まず、対象となる変数を抽出する。ここで
抽出されるのは、キーワードが付与されている変数i、
kであり、キーワードが付与されていない変数jは抽出
されない(step31/step32)。
【0025】次に、抽出された変数i、kに対し、その
変数が取り得る値の範囲を解析する(step33)。この中
で、変数iの取り得る値の範囲は8から10、変数kの
取り得る値の範囲は127から129である。
【0026】次に、解析した各変数の取り得る値の範囲
について、その範囲が1バイト(8ビット)で表現でき
る値か、2バイト(16ビット)必要な値かどうかを判
定する(step34)。変数iは1バイト(8ビット)あれ
ば充分であり、変数kは2バイト(16ビット)必要で
ある。
【0027】次に、上記判定結果をもとに、各変数にと
って最適な型を決定する(step35)。変数iはchar
型、変数kはint型として決定する。抽出されなかっ
た変数jは、定義されたint型のままで扱われる。
【0028】その結果、変数i、j、kのメモリ上への
割り当ては、図5のようになる。
【0029】また、限定条件の与え方は、本実施例で説
明した変数単位に与える方法の他に、関数単位、ファイ
ル単位など様々な形態が考えられる。
【0030】さらにまた、キーワードによる方法の他、
変数名で限定する方法、属性の種類で限定する方法など
の形態も考えられる。
【0031】(第3実施例)既定の型をもつ整数群の例
を図6のプログラムを例に図2の流れ図に従って説明す
る。ここではC言語の列挙型定数を例に説明するが、C
言語の列挙型定数は式の中でint型として扱うという
仕様であるが、本発明ではひとつの列挙型のメンバーの
値の範囲によって、その列挙子メンバーの最適な型を決
定する。
【0032】図6のプログラム例において、タグ名が
「BEST1」である列挙子メンバーの値の範囲は−1
28から127であり、タグ名が「BEST2」である
列挙子メンバーの値の範囲は−32768から3276
7である。
【0033】まず、対象となる変数を抽出する。ここで
抽出されるのは、タグ名が「BEST1」である列挙子
メンバーに属している変数i及び変数jと、タグ名が
「BEST2」である列挙子メンバーに属している変数
k及び変数lである(step31/step32)。
【0034】次に、抽出された変数i、j及びk、lに
対し、その変数が取り得る値の範囲を解析する(step3
3)。この中で、変数i、jの取り得る値の範囲は−1
28から127、変数k、lの取り得る値の範囲は−3
2768から32767である。
【0035】次に、解析した各変数の取り得る値の範囲
について、その範囲が1バイト(8ビット)で表現でき
る値か、2バイト(16ビット)必要な値かどうかを判
定する(step34)。変数i、jは1バイト(8ビット)
あれば充分であり、変数k、lは2バイト(16ビッ
ト)必要である。
【0036】次に、上記判定結果をもとに、各変数にと
って最適な型を決定する(step35)。変数i、jはch
ar型、変数k、lはint型として式の中で扱われ
る。
【0037】その結果、変数i、j、k、lのメモリ上
への割り当ては、図7のようになる。
【0038】(第4実施例)次に、不変の値をもつ属性
を有する変数について説明する。
【0039】ある限定条件を与え、その限定条件を満足
した変数のみについて、属性の最適化を行う処理を、図
8のプログラムを例に図2の流れ図に従って説明する。
【0040】ここではC言語のconst属性を例に説
明するが、C言語のconst属性をもつ変数はその値
を変更することがない。
【0041】図8のプログラム例において、変数a1、
a2、a3、a4はint型であり且つconst属性
が定義されている。
【0042】まず、対象となる変数を抽出する。ここで
抽出されるのは、変数a1、a2、a3、a4である
(step31/step32)。
【0043】次に、抽出された変数a1、a2、a3、
a4に対し、その変数が取り得る値の範囲を解析する
(step33)。変数a1の値は1、変数a2の値は10、
変数a3の値は100、変数a4の値は1000であ
り、これらの値は変わることがない。
【0044】次に、解析した各変数の値ついて、その値
が1バイト(8ビット)で表現できる値か、2バイト
(16ビット)必要な値かどうかを判定する(step3
4)。変数a1、a2、a3は1バイト(8ビット)あ
れば充分であり、変数a4は2バイト(16ビット)必
要である。
【0045】次に、上記判定結果をもとに、各変数にと
って最適な型を決定する(step35)。変数a1、a2、
a3はchar型、変数a4はint型として決定す
る。
【0046】その結果、変数i、j、kのメモリ上への
割り当ては、図9のようになる。
【0047】(第5実施例)次に、型の大きさが変数の
取り得る値の範囲より小さい場合についての処理を、図
10のプログラムを例に図2の流れ図に従って説明す
る。
【0048】まず、対象となる変数を抽出する。ここで
抽出されるのは、変数i、j、kであり、いずれの変数
もchar型である(step31/step32)。
【0049】次に、抽出された変数i、j、kに対し、
各変数が取り得る値の範囲を解析する(step33)。この
中で、変数iの取り得る値の範囲は8から10、変数j
の取り得る値の範囲は18から20、変数kの取り得る
値の範囲は127から129である。
【0050】次に、解析した各変数の取り得る値の範囲
について、その範囲が1バイト(8ビット)で表現でき
る値か、2バイト(16ビット)必要な値かどうかを判
定する(step34)。変数i及び変数jは1バイト(8ビ
ット)あれば充分であり、変数kは2バイト(16ビッ
ト)必要である。
【0051】上記判定結果をもとに、各変数にとって最
適な型を決定する(step35)。変数i、jはchar
型、変数kはint型として決定する。
【0052】その結果、変数i、j、kのメモリ上への
割り当ては、図11のようになり、メモリが効率良く使
用される、と共に変数kの桁あふれの不具合を修正でき
る。
【0053】以上、本発明のプログラム言語処理装置に
おけるメモリ効率化方法について、第1実施例乃至第5
実施例を用いて詳細に説明したが、本発明は前記実施例
に限定されず、本発明の主旨を逸脱しない範囲におい
て、種々の改良や変更を成し得るであろう。第1実施例
乃至第5実施例はあくまでも一例であり、要求されるシ
ステムの条件に合わせて、様々な実施の形態が考えられ
る。
【0054】例えば、本実施例で説明した最適な型を決
定するものにはC言語の他に例えばFORTRAN言語
などにも適用できるし、例えばCOBOL言語やPL/
I言語などのように型と長さを定義する言語の場合に
は、最適な長さを決定することで実現が可能である。
【0055】従って、本発明はこの開示から妥当な特許
請求の範囲に係わる発明特定事項によってのみ限定され
るものでなければならない。
【0056】
【発明の効果】以上述べてきたように、本発明のプログ
ラム言語処理装置におけるメモリ効率化方法によれば、
特に変数の持つ値により変数の属性を最適な型に決定す
ることで、メモリの利用効率を向上させることが可能と
なり、ハードウェア資源を有効に利用できる。また、従
来プログラム作成者の資質に依存していた変数の属性の
決定を、機械的に最適な属性に決定できるため、ソフト
ウェアの品質向上効果も期待できる。
【図面の簡単な説明】
【図1】本発明のメモリ効率化方法を適用したプログラ
ム言語処理装置の一実施例を示すブロック図である。
【図2】本発明のメモリ効率化方法の処理手順を表す流
れ図である。
【図3】図12に示すプログラムに対するメモリ効率化
の実施前/後のメモリの使用状況を表す簡略図である。
【図4】第2実施例のメモリ効率化の動作を説明するプ
ログラム例である。
【図5】図4に示すプログラムに対するメモリ効率化の
実施前/後のメモリの使用状況を表す簡略図である。
【図6】第3実施例のメモリ効率化の動作を説明するプ
ログラム例である。
【図7】図6に示すプログラムに対するメモリ効率化の
実施前/後のメモリの使用状況を表す簡略図である。
【図8】第4実施例のメモリ効率化の動作を説明するプ
ログラム例である。
【図9】図8に示すプログラムに対するメモリ効率化の
実施前/後のメモリの使用状況を表す簡略図である。
【図10】第5実施例のメモリ効率化をの動作を説明す
るプログラム例である。
【図11】図10に示すプログラムに対するメモリ効率
化の実施前/後のメモリの使用状況を表す簡略図であ
る。
【図12】従来のプログラム言語処理装置の動作/第1
実施例のメモリ効率化の動作を説明するためのプログラ
ム例である。
【図13】図12に示すプログラムを、従来のプログラ
ム言語処理装置で処理した結果のメモリの使用状況を表
す簡略図である。
【符号の説明】 10....プログラム言語処理装置 11....原始プログラム 12....目的プログラム 13....翻訳手段 14....最適化手段 20....メモリ効率化手段 21....変数抽出手段 22....変数値解析手段 23....変数値判定手段 24....型決定手段

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】 入力されたプログラムより変数を抽出す
    るステップと、 抽出された前記変数に対し、該変数が取り得る値もしく
    は値の範囲を解析するステップと、 前記変数の値もしくは値の範囲から、該変数の最適な型
    を決定するステップと、を有することを特徴とするメモ
    リ効率化方法。
  2. 【請求項2】 前記変数は有効範囲が特定された変数で
    あって、その有効範囲内で当該変数が取り得る値若しく
    は値の範囲から、該変数の最適な型を決定することを特
    徴とする請求項1記載のメモリ効率化方法。
  3. 【請求項3】 前記変数を限定するための限定条件を変
    数単位に与え、与えられた限定条件を満足した変数のみ
    当該変数の最適な型を決定することを特徴とする請求項
    1乃至請求項2記載のメモリ効率化方法。
JP11150552A 1999-05-28 1999-05-28 メモリ効率化方法 Pending JP2000339172A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP11150552A JP2000339172A (ja) 1999-05-28 1999-05-28 メモリ効率化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP11150552A JP2000339172A (ja) 1999-05-28 1999-05-28 メモリ効率化方法

Publications (1)

Publication Number Publication Date
JP2000339172A true JP2000339172A (ja) 2000-12-08

Family

ID=15499382

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11150552A Pending JP2000339172A (ja) 1999-05-28 1999-05-28 メモリ効率化方法

Country Status (1)

Country Link
JP (1) JP2000339172A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006053246A (ja) * 2004-08-10 2006-02-23 Sanyo Electric Co Ltd データ処理装置、データ処理プログラム、データ処理装置のデータ処理方法
JP2009110299A (ja) * 2007-10-30 2009-05-21 Internatl Business Mach Corp <Ibm> プログラムを最適化するコンパイラ
WO2011096016A1 (ja) * 2010-02-05 2011-08-11 株式会社 東芝 コンパイラ装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006053246A (ja) * 2004-08-10 2006-02-23 Sanyo Electric Co Ltd データ処理装置、データ処理プログラム、データ処理装置のデータ処理方法
JP2009110299A (ja) * 2007-10-30 2009-05-21 Internatl Business Mach Corp <Ibm> プログラムを最適化するコンパイラ
WO2011096016A1 (ja) * 2010-02-05 2011-08-11 株式会社 東芝 コンパイラ装置
JPWO2011096016A1 (ja) * 2010-02-05 2013-06-06 株式会社東芝 コンパイラ装置

Similar Documents

Publication Publication Date Title
US7784039B2 (en) Compiler, compilation method, and compilation program
JP2001147819A (ja) 最適化装置および記録媒体
US6738966B1 (en) Compiling device, computer-readable recording medium on which a compiling program is recorded and a compiling method
CN111966383B (zh) 一种操作系统内核兼容性量化分析方法、系统和介质
CN1826586A (zh) 软件原子化
US8291397B2 (en) Compiler optimized function variants for use when return codes are ignored
CN111124382A (zh) Java中的属性赋值方法、装置及服务器
US20030066052A1 (en) API to increase debug log performance
US5418959A (en) Instruction operation size optimization
JPH0934725A (ja) 言語処理装置及び言語処理方法
CN113721928B (zh) 一种基于二进制分析的动态库裁剪方法
US7240341B2 (en) Global constant pool to allow deletion of constant pool entries
JP2000339172A (ja) メモリ効率化方法
JP2006163686A (ja) コンパイル方法、コンパイルプログラム、コンパイル装置およびコンパイル用の記録媒体
CN112114817A (zh) 基于cobol语言的数据字典字段信息获取方法及装置
US7032215B2 (en) Method and system for type demotion of expressions and variables by bitwise constant propagation
US8954307B1 (en) Chained programming language preprocessors for circuit simulation
CN114879978A (zh) 软件包依赖关系的处理方法、计算设备及可读存储介质
CN116560667B (zh) 一种基于预编译延迟执行的拆分调度系统及方法
CN1252586C (zh) 产生优化的计算机数据字段转换例程
CN118409758B (zh) 用于编译核函数的方法、装置、介质和程序产品
US5802372A (en) Language processing system
JP3338466B2 (ja) 主記憶アクセス最適化処理装置
CN115373689A (zh) 基于llvm的编译优化方法、装置、设备及介质
JPH036624A (ja) 複数コード系に対応する翻訳リスト出力処理方式