CN100476732C - 编译方法、编译装置及编译程序 - Google Patents

编译方法、编译装置及编译程序 Download PDF

Info

Publication number
CN100476732C
CN100476732C CNB2004101037298A CN200410103729A CN100476732C CN 100476732 C CN100476732 C CN 100476732C CN B2004101037298 A CNB2004101037298 A CN B2004101037298A CN 200410103729 A CN200410103729 A CN 200410103729A CN 100476732 C CN100476732 C CN 100476732C
Authority
CN
China
Prior art keywords
independent variable
function
value
transmit
transmission
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.)
Active
Application number
CNB2004101037298A
Other languages
English (en)
Other versions
CN1637708A (zh
Inventor
浅尾忍
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.)
Socionext Inc
Original Assignee
Matsushita Electric Industrial Co Ltd
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Publication of CN1637708A publication Critical patent/CN1637708A/zh
Application granted granted Critical
Publication of CN100476732C publication Critical patent/CN100476732C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本发明提供一种编译方法、编译装置及编译程序。该编译方法是一种程序员没有必要有意识地使用引用传递来进行编程,即使在使用了值传递的情况下代码生成效率也很高的编译方法,包括:中间代码生成步骤,由源程序生成中间代码;优化步骤,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将调用具有上述值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数,由此优化上述中间代码;以及目标代码转换步骤,将优化了的上述中间代码转换为目标代码。

Description

编译方法、编译装置及编译程序
技术领域
本发明涉及一种编译方法,特别涉及将由以C++语言为代表的面向对象语言描述的源程序转换为目标程序的编译方法。
背景技术
近年来,在软件开发方面,程序规模逐渐大规模化,与此同时,维护性、再利用性高的面向对象语言(Object-oriented language)正在受到关注。有代表性的面向对象语言可以列举出C++语言。C++语言是对作为移植性优异的高级语言的C语言进行形式扩展,以便以面向对象的方式自然地进行描述的语言。在C++语言中,能在程序中定义函数,在必要的位置调用该函数,从而执行由函数定义的处理。给函数赋予自变量时,赋予自变量的方法有“值传递”和“引用传递(指针传递)”。
在现有的C++语言中,给函数赋予自变量时,在生成所赋予的自变量的副本之后,该副本存储在存储器中。值传递时,在传递的对象作为自变量全部被复制之后,副本存储在存储器中。例如,在对象为分类目标时,首先执行生成该分类目标的副本的处理,然后所生成的分类目标存储在存储器中。另一方面,在引用传递时,对象是指针值(目标的地址值),因此该指针值被复制并存储在存储器中。
根据Scott Meyers著、吉川邦夫译“Effective C++修订第2版”,ASUKI,1998年5月1日,22项“与值传递相比,若使用引用传递”(以下,称为相关文献。),则值传递中的分类目标的副本,有可能暗中引起许多复制构造程序的调用,因此能成为编译结果的代码量增加的原因。另外,一般来讲,与值传递相比,使用引用传递(passby reference/リフアレンス渡し)时代码生成效率高。因此,重要的是程序员尽可能有意识地使用引用传递来进行编程。
但是,相关文献所记载的内容,明确指出程序员应该从头到尾有意识地使用引用传递来进行编程,这无非是强迫程序员进行考虑了代码生成率的编程。
另外,使用引用传递时,有可能引起别名使用问题(为了对相同的目标使用多个名字,存在无意识地改变目标的状态的危险性的问题)。这样,存在程序中容易混入程序错误(bug)的问题。
发明内容
本发明是鉴于这样的课题而做出的,目的在于提供一种编译方法,程序员没有必要有意识地使用引用传递进行编程,即使是使用值传递进行编程时,代码生成率也很高。
本发明所涉及的编译方法,是将用高级语言描述的源程序转换为目标代码的编译方法,包括以下步骤:中间代码生成步骤,由源程序生成中间代码;优化步骤,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将自变量的值传递转换为引用传递,由此优化上述中间代码;以及目标代码转换步骤,将优化了的上述中间代码转换为目标代码。
根据该方法,即使程序员用值传递编写程序,也能转换为引用传递的程序。因此,程序员没有必要有意识地使用引用传递进行编程。这样,对于程序员,不用强迫进行考虑代码生成率的编程,并且程序中也难以混入错误。
优选上述优化步骤,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将调用具有上述值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数,由此优化上述中间代码。另外,上述优化步骤包括:值传递自变量更新信息抽取子步骤,从上述中间代码中抽取值传递自变量更新信息,该值传递自变量更新信息至少包括具有值传递自变量的函数、直接调用具有该值传递自变量的函数的函数、有可能间接调用具有该值传递自变量的函数的函数、具有该值传递自变量的函数的值传递自变量、以及表示该值传递自变量在具有值传递自变量的函数的定义内是否已被更新的更新判断信息;以及转换子步骤,根据上述值传递自变量更新信息,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将调用具有值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数。
另外,优选在上述转换子步骤中,在没有强制地使调用具有上述值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数的指定的情况下,根据上述值传递自变量更新信息,在没有有可能间接调用具有上述值传递自变量的函数的函数、并且上述值传递自变量在具有值传递自变量的函数的定义内未被更新的情况下,将直接调用具有上述值传递自变量的函数的函数转换为直接调用具有引用传递自变量的函数的函数。
根据该方法,具有值传递自变量的函数,在定义内未更新自变量时,能删除作为冗余的函数调用侧的副本生成代码。因此,能生成高效的代码。
另外,优选在上述转换子步骤中,在有强制地使调用具有值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数的指定的情况下,对于有该指定的具有值传递自变量的函数,根据上述值传递自变量更新信息,将直接地调用具有上述值传递自变量的函数的函数和有可能间接调用具有上述值传递自变量的函数的函数,分别转换为直接调用具有引用传递自变量的函数的函数和有可能间接调用具有引用传递自变量的函数的函数。
根据该方法,具有值传递自变量的函数在定义内更新了自变量的情况下,也能删除作为冗余的函数调用侧的副本生成代码,能生成高效的代码。
更优选上述优化步骤,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递,由此优化上述中间代码。并且,上述优化步骤包括:值传递自弯量更新信息抽取子步骤,从上述中间代码中抽取值传递自变量更新信息,该值传递自变量更新信息至少包括具有值传递自变量的函数、直接调用具有该值传递自变量的函数的函数、有可能间接调用具有该值传递自变量的函数的函数、具有该值传递自变量的函数的值传递自变量、以及表示该值传递自变量在具有值传递自变量的函数的定义内是否已被更新的更新判断信息;以及转换子步骤,根据上述值传递自变量更新信息,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递。
更优选在上述转换子步骤中,在没有强制地使基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递的指定的情况下,根据上述值传递自变量更新信息,在没有有可能间接调用具有上述值传递自变量的函数的函数、并且上述值传递自变量在具有值传递自变量的函数的定义内未被更新的情况下,将基于具有上述值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递。
根据该方法,在具有值传递自变量的函数在定义内未更新自变量的情况下,对具有值传递自变量的函数定义中的自变量的存取成为与具有引用传递自变量的函数定义同样的存取,因此能生成高效的代码。
更优选在上述转换子步骤中,在有强制地使基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递的指定的情况下,对于有该指定的具有值传递自变量的函数,根据上述值传递自变量更新信息,将基于具有上述值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递,如果上述值传递自变量在函数定义内已被更新,则在上述中间代码中在值实际被更新的部分之前,从已转换的引用传递自变量中引用自变量值来生成其副本,并将该副本设定为引用目的地。
根据该方法,在具有值传递自变量的函数在定义内未更新自变量的情况下,在对具有值传递自变量的函数定义中的自变量的存取成为与具有引用传递的函数定义同样的存取。
另外,本发明不仅能实现具有这样的特征的步骤的编译方法,而且能实现以该编译方法所包含的特征的步骤为单元的编译装置,还能实现使该编译方法所包含的特征的步骤使计算机执行的编译程序。并且,不言而喻,这样的编译程序能通过光盘只读存储器(CD-ROM)等记录介质和应特网等传输介质进行传递。
根据本发明的编译方法,程序员没有必要有意识地使用引用传递进行编程。
并且,即使在使用了值传递的情况下,也能生成代码量小的目标代码。
另外,即使在用户在高级语言程序内使用直接描述汇编语言的语法(汇编语言语法等),用在通过将调用具有值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数来优化中间代码的步骤,以及通过将基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递来优化中间代码的步骤中的任意一个步骤中所依据的汇编程序代码描述源程序的情况下,也能得到同样的效果。
附图说明
本发明的上述和其它目的、优点及特征,将从根据附图所描述的本发明的具体实施方式中得以明确。
图1是执行本发明的实施方式所涉及的编译程序的编译装置的外观图。
图2是表示图1所示的编译装置的硬件结构的框图。
图3是由本发明的实施方式所涉及的编译程序执行的处理的流程图。
图4是用于说明值传递自变量更新信息存储单元中所存储的值传递自变量更新信息的内容的图。
图5是详细表示值传递自变量更新信息抽取处理的流程图。
图6是包含有可能间接调用值传递函数的函数的源程序的一个例子的图。
图7A~图7C是表示对于源程序的值传递自变量更新信息的一个例子的图,该源程序包含有可能间接调用值传递函数的函数。
图8是详细表示值传递函数调用引用传递转换处理的流程图。
图9是详细表示值传递函数定义引用传递转换处理的流程图。
图10A是表示在具体例1中所使用的程序存储单元中存储的头文件的一个例子的图。
图10B是表示在具体例1中所使用的程序存储单元中存储的源程序的一个例子的图。
图11是表示在具体例1中对自变量进行值传递的情况下的栈构架的一个例子的图。
图12是表示用现有的方法对图10A及图10B所示的文件进行编译的情况下的汇编程序代码的一个例子的图。
图13是表示具体例1中的值传递自变量更新信息的一个例子的图。
图14是在具体例1及具体例2中将自变量转换为引用传递后的栈构架的一个例子的图。
图15是表示在具体例1及具体例2中将自变量转换为引用传递后的汇编程序代码的一个例子的图。
图16A是表示在具体例2中所使用的程序存储单元中存储的头文件的一个例子的图。
图16B是表示在具体例2中所使用的程序存储单元中存储的源程序的一个例子的图。
图17是表示在具体例2中对自变量进行引用传递时的栈构架的一个例子的图。
图18是表示用现有的方法对图16A及图16B所示的文件进行编译后的汇编程序代码的一个例子的图。
图19是表示具体例2中的值传递自变量更新信息的一个例子的图。
图20A是表示在具体例3所使用的程序存储单元中存储的头文件的一个例子的图。
图20B是表示在具体例3所使用的程序存储单元中存储的源程序的一个例子的图。
图21是表示用现有的方法对图20A及图20B所示的文件进行编译后的汇编程序代码的一个例子的图。
图22是表示具体例3中的值传递自变量更新信息的一个例子的图。
图23是表示在具体例3中,在值传递自变量在函数定义内已被更新的情况下,强制转换为引用传递时的栈构架的一个例子的图。
图24是表示在具体例3中,在值传递自变量在函数定义内已被更新的情况下,强制转换为引用传递时的汇编程序代码的一个例子的图。
具体实施方式
以下,参照附图对本发明的实施方式所涉及的编译程序进行说明。
图1是执行本发明的实施方式所涉及的编译装置的外观图。编译装置22包括:计算机34、监视器32、键盘36、鼠标38、以及CD-ROM装置40。
计算机34是执行编译程序等程序的处理装置。监视器32是用于显示处理结果的显示装置。键盘36和鼠标38分别是连接在计算机34上,用于对计算机34输入指示等的输入装置。CD-ROM装置40是用于读入记录在CD-ROM42中的编译程序等程序的装置。
图2是表示编译装置22的硬件结构的框图。构成编译装置22的计算机34包括:CPU(中央处理器)44、ROM(只读存储器)46、RAM(随机存储器)48、硬盘50、通信调制解调器52、以及总线54。
CPU44是执行编译程序等各种程序的处理单元。ROM46是存储各种程序和各种数据的存储单元。RAM48是暂时存储由CPU44执行的程序和该程序执行时所生成的数据的存储器。硬盘50是存储各种程序和各种数据的存储装置,包括存储头文件和源程序的程序存储单元56、存储后述的值传递自变量更新信息的值传递自变量更新信息存储单元58、以及存储目标程序的生成代码存储单元60。通信调制解调器52是用于经应特网等网络下载程序的装置。总线54是用于将计算机34的各处理单元连接的信号线。
图3是由编译程序执行的处理的流程图。
编译程序读入在程序存储单元56中存储的头文件和源程序(S1)。编译程序分析读入的源程序的语法,进行符号表的生成和语法树的生成等(S2)。接着,编译程序根据所生成的语法树,生成中间代码(S3)。之后,编译程序对所生成的中间代码实施各种优化(S4)。另外,编译程序给优化后的中间代码所包含的所有变量分配寄存器和存储器等硬件资源(S5),将分配了资源的中间代码转换为目标代码,并将目标程序输出到生成代码存储单元60(S6)。
优化处理(S4)包括值传递自变量更新信息抽取处理(S11)、值传递函数调用引用传递转换处理(S12)、值传递函数定义引用传递转换处理(S13)、以及其它的优化处理(S14)。
值传递自变量更新信息抽取处理(S11)是根据中间代码对“具有值传递自变量的函数”、“直接调用具有值传递自变量的函数的函数”、“有可能间接调用具有值传递自变量的函数的函数”、“值传递自变量”、以及表示值传递自变量在函数定义内是否已被更新的“更新判断信息”进行抽取的处理。
在值传递函数调用引用传递转换处理(S12)中,根据在值传递自变量更新信息抽取处理(S11)中抽取出的信息,判断是否能将基于值传递函数的调用转换为基于引用传递函数的调用。在该处理(S12)中,根据判断结果,将基于值传递函数的调用转换为基于引用传递函数的调用。
在值传递函数定义引用传递转换处理(S13)中,根据在值传递自变量更新信息抽取处理(S11)中抽取出的信息,判断是否能将基于值传递函数的值而进行的自变量接收传递转换为基于引用的自变量接收传递。在该处理(S13)中,根据判断结果,将基于值传递函数的值的自变量接收传递转换为基于引用的自变量接收传递。
对于值传递自变量更新信息抽取处理(S11)、值传递函数调用引用传递转换处理(S12)、以及值传递函数定义引用传递转换处理(S13)将在后面详细说明。
值传递函数调用引用传递转换处理(S12)和值传递函数定义引用传递转换处理(S13)不依赖于顺序,哪一个先进行都可以。
其它的优化处理(S14)是普通的优化处理,不是本发明的要点,因此省略其说明。
图4是用于说明值传递自变量更新信息存储单元58中所存储的值传递自变量更新信息62的内容的图。值传递自变量更新信息62中包括“具有值传递自变量的函数”、“直接调用具有值传递自变量的函数的函数”、“有可能间接调用具有值传递自变量的函数的函数”、“值传递自变量”、“更新判断信息”、以及“引用传递转换判断信息”。它们的详细说明将在后面的处理中进行适当说明。
关于源程序输入处理(S1)、语法分析处理(S2)、中间代码生成处理(S3)、其它的优化处理(S14)、资源分配处理(S5)、以及目标输出处理(S6),是与现有的处理相同的处理,不是本发明的重点。因此省略详细的说明。
以下依次说明作为本发明的重点的值传递自变量更新信息抽取处理(S11)、值传递函数调用引用传递转换处理(S12)、以及值传递函数定义引用传递转换处理(S13)。
图5是详细表示值传递自变量更新信息抽取处理(S11)的流程图。
编译程序从现存编译对象的中间代码中抽取全部的函数说明、定义(S21)。此时的编译对象可以是对单一的翻译单位(单一的源程序)的编译,也可以是对多个翻译单位(多个源程序)的编译。
编译程序从已抽取的函数说明、定义中抽取“具有值传递自变量的函数”,并记录在值传递自变量更新信息62中(S22)。接着,抽取直接调用(是使用了函数名等的调用,在编译时能唯一地确定调用哪个函数)值传递自变量更新信息62中所记录的各值传递函数的函数,并记录在值传递自变量更新信息62中(S23)。同样,编译程序抽取有可能间接调用(是使用了至函数的指针等的调用,在编译时不能唯一地确定调用哪个函数)值传递自变量更新信息62中所记录的各值传递函数的函数,并记录在值传递自变量更新信息62中(S24)。
图6是源程序的一个例子的图,该源程序包含有可能间接调用值传递函数的函数。在函数func1的定义中,存在结构A的具有值传递自变量的函数的间接调用p(x)。在该函数调用p(x)中,不能唯一地特定实际调用结构A的具有值传递自变量的函数func2、func3和func4中的哪一个。因此,如图7A~图7B所示,在函数func2、func3和func4的各值传递自变量更新信息62中,func1被记录为有可能间接调用值传递函数的函数。
接着,编译程序对已记录的各值传递函数的各值传递自变量连续地进行以下的处理(S25)。编译程序判断值传递自变量是否有可能在函数定义内已被更新(S26)。如果没有可能被更新(S26为否),则编译程序将“值传递自变量未被更新”的更新判断信息记录在值传递自变量更新信息62中(S27)。如果有可能被更新(S26为是),则编译程序将“值传递自变量已被更新”的更新判断信息记录在值传递自变量更新信息62中(S28)。
通过实施以上的处理,抽取现存编译对象中的值传递自变量更新信息62的“具有值传递自变量的函数”、“直接调用具有值传递自变量的函数的函数”、“有可能间接调用具有值传递自变量的函数的函数”、“值传递自变量”和“更新判断信息”。
接着,详细地对值传递函数调用引用传递转换处理(S12)进行说明。图8是详细表示值传递函数调用引用传递转换处理(S12)的流程图。
首先,编译程序进行是否将值传递的函数强制转换为引用传递的函数的判断(S31)。在此,是否强制转换,是根据命令行选项和编译指示等用户的指示、在编译程序内部另外进行的优化评价结果(模拟了目标程序后的概要信息等)进行判断的。在想要减少代码量时,强制转换成引用传递。
在不进行强制的转换时(S31为否),对于已登录的各值传递自变量更新信息62,编译程序反复进行以下的循环处理(S32)。编译程序调查正着眼处理的值传递自变量更新信息62中所包含的“直接调用具有值传递自变量的函数的函数”和“有可能间接调用具有值传递自变量的函数的函数”是否已由asm文等汇编程序描述转换为基于引用传递的调用(S33)。在已转换为基于引用传递的调用的情况下(S33为是),编译程序着眼处理下一个值传递自变量更新信息62,并反复进行循环处理(S32)。
如果未由汇编程序描述转换为基于引用传递的调用(S33为否),则编译程序判断是否有可能间接调用正着眼处理的“具有值传递自变量的函数”(S34)。即,编译程序检查函数名是否已记入值传递自变量更新信息62的“有可能间接调用具有值传递自变量的函数的函数”的栏中(S34)。
在存在“有可能间接调用具有值传递自变量的函数的函数”的情况下(S34为是),正着眼处理的“具有值传递自变量的函数”将不成为引用传递转换的对象。因此,编译程序将以下一个值传递自变量更新信息62为新的处理对象。
在不存在“有可能间接调用具有值传递自变量的函数的函数”的情况下(S34为否),编译程序对各“值传递自变量”执行循环处理(S35)。在循环处理(S35)中,编译程序进行值传递自变量是否已被更新的判断处理(S36)。如果值传递自变量已被更新(S36为是),则编译程序判断为引用传递转换不可能,并将判断结果记录在值传递自变量更新信息62的“引用传递转换判断信息”中(S38)。如果值传递自变量未被更新(S36为否),则编译程序判断为引用传递转换可能,并将判断结果记录在值传递自变量更新信息62的“引用传递转换判断信息”中(S37)。
接着,对于具有被判断为引用传递转换可能的自变量的函数的各直接调用函数执行循环处理(S39)。在循环处(S39)中,将基于值传递自变量的调用转换为基于引用传递的调用(S40)。
另一方面,在进行强制的转换时(S31为是),对于登录的值传递自变量更新信息62的全部值传递自变量,将是引用传递转换可能的信息记录在“引用传递转换判断信息”中,并将基于值传递自变量的调用转换为基于引用传递的调用(S41、S42、S43、S44、S45)。
通过实施以上的处理,能将基于成为转换候补的值传递自变量的调用转换为基于引用传递的调用。
接着,详细说明值传递函数定义引用传递转换处理(S13)。图9是详细表示值传递函数定义引用传递转换处理(S13)的流程图。在图9所示的处理中,用于求出值传递自变量62的“引用传递转换判断信息”的处理(S51、S53、S52、S54、S55、S56、S57、S58、S61、S62、S63),是与图8所示的处理(S31、S33、S32、S34、S35、S36、S37、S38、S41、S42、S43)相同的处理,因此省略说明。它们是将值传递是否有可能转换成引用传递记录在值传递自变量更新信息62中的处理。它们是相同的处理的原因是:在编译程序的优化处理(S4)中,先进行值传递函数调用引用传递转换处理(S12)和值传递函数定义引用传递转换处理(S13)中的哪一个都没有关系。因此,在某一个已被实施,值传递自变量更新信息62的“值传递转换判断信息”已被记录的情况下,省略判断是否有可能转换为它们的引用传递并进行记录的处理也没有关系。
在不强制转换为引用传递的情况下(S51为否),在将值传递是否有可能转换为引用传递的判断结果记录在值传递自变量更新信息62的“值传递转换判断信息”中后,对于具有判断为引用传递转换可能的自变量的函数,进行循环处理(S59)。在循环处理(S59)中,将基于值传递自变量的自变量接收传递转换为基于引用传递的自变量接收传递(S60)。
另一方面,在进行强制的转换的情况下(S51为是),在将值传递是否有可能转换为引用传递的判断结果记录在值传递自变量更新信息62的“值传递转换判断信息”中后,对于具有判断为引用传递转换可能的自变量的函数,进行循环处理(S64)。在循环处理(S64)中,将基于值传递自变量的自变量接收传递转换为基于引用传递的自变量接收传递(S65)。接着,对转换后的引用传递自变量进行循环处理(S66)。在循环处理(S66)中,由“更新判断信息”调查值传递自变量在函数定义内是否已被更新的判断结果(S67)。如果值传递自变量已被更新(S67为是),则在中间代码中,实际上在值被更新的部分之前,从转换了的引用传递自变量中引用自变量值,并生成其副本,进而再将该副本再设定为引用目的地(S68)。由于本来是基于值传递的自变量接收传递,因此不允许在调用源中反映出对函数调用目的地的自变量的更新,但是,转换为基于引用传递的自变量接收传递的结果是:为了防止更新结果反映在调用源中而进行上述处理。即,在对自变量进行更新的情况下,变成为使在现有函数调用源中生成的自变量副本生成在函数调用目的地中。
这样,如果在调用一侧建立临时变量,则每次调用都必须建立临时变量,如果在被调用一侧建立临时变量,则建立临时变量的代码可以集中在一个位置。这样,能减少代码量。
通过实施以上的处理,能将基于成为转换候补的值传递自变量的自变量接收传递转换为基于引用传递的自变量接收传递。
对于实施了优化处理(S4)的中间代码,通过进行资源分配处理(S5)和目标程序输出处理(S6),能削减最终生成的目标程序的目标代码的量,其中,上述优化处理(S4)包括以上那样的值传递更新信息抽取处理(S11)、值传递函数调用引用传递转换处理(S12)和值传递函数定义引用传递转换处理(S13)、以及其它的优化处理(S14)。
以下,参照具体例来更详细地对将值传递自变量的函数转换为引用传递自变量的函数的优化处理。
(具体例1)
图10A是表示存储在程序存储单元56中的头文件的一个例子的图,图10B是表示存储在程序存储单元56中的源程序的一个例子的图。以下,对输入了该头文件和源程序的情况下的编译程序的动作进行说明。
在图10A所示的头文件“struct.h”中描述了结构A的定义。在图10B所示的源文件“prog1.cc”中描述了头文件“struct.h”的读入处理、值传递自变量函数“void f(A obj)”的定义、调用函数f的函数“void g(void)”、以及函数“void h(void)”的定义。
首先,表示基于现有的方法的具体例。函数f是“具有值传递自变量的函数”,因此在由函数g和函数h调用函数f时,自变量的接收传递成为基于值传递的方法。
图11表示由函数g调用函数f时的栈构架的一个例子。在图10B所示的函数g的定义中,以局部自变量x为值传递自变量来调用函数f。此时的栈构架如图11所示,从确保了局部变量的区域(函数g执行时的SP(堆栈指针的值)+16~SP+24)中将自变量值的副本存储在确保实自变量的区域(函数g执行时的SP+4~SP+12)。如果执行转移到函数f,则对自变量的存取通过对确保伪自变量的区域(函数f执行时的SP+16~SP+24)进行存取来实现。
图12示出了用现有的方法实施的情况下的、表示函数f和函数g的定义的汇编程序代码。如函数f的定义所示,伪自变量obj.x、obj.y、obj.z的值分别从栈构架的SP+16、SP+20、SP+24开始进行读入。另外,如函数g的定义所示,在进行函数f的调用之前,从局部变量区域(SP+16~SP+24)向实自变量区域(SP+4~SP+12)实施值的复制。
接着,示出本实施方式的实施例。首先,实施值传递自变量更新信息抽取处理(S11)时,抽取图13(a)所示的值传递自变量更新信息62。即,作为“具有值传递自变量的函数”抽取void f(A obj)的信息,作为“直接调用具有值传递自变量的函数的函数”抽取voidg(void)、void h(void)的信息,抽取“有可能间接调用具有值传递自变量的函数的函数”不存在的信息,在函数f中成为值传递对象的“值传递自变量”抽取第1自变量A obj的信息,在函数定义内自变量的更新抽取未进行的信息。
接着,实施值传递函数调用引用传递转换处理(S12),函数f的值传递自变量“A obj”在函数定义内进行了引用,但是未进行更新,因此与是否进行强制的引用传递的判断处理(S31)的结果无关,如图13(b)所示,第1自变量的“引用传递转换判断信息”被记录为“可能”。这样,值传递函数调用被转换为引用传递函数调用。
与实施值传递函数定义引用传递转换处理(S13)的情况相同,与是否进行强制的引用传递的判断处理(S51)的结果无关,结果记录为引用传递转换可能,因此基于函数f的自变量接收传递被转换为基于引用传递的函数接收传递。
图14示出了将值传递自变量转换为引用传递自变量后的栈构架的一个例子的图。对于实自变量区域(函数g执行时的SP+4),不是转换为自变量值,而是转换为对自变量的引用(即,地址)。因此削减了堆栈的使用区域。
图15示出了将值传递自变量转换为引用传递自变量后的表示函数f、函数g的定义的汇编程序代码。如函数f的定义所示,伪自变量不是自变量值本身,而被视为传递了对自变量值的引用(即,地址),因此对伪自变量的存取经由存储在伪自变量区域(函数f执行时的SP+16)中的自变量地址来进行。另外,如函数g的定义所示,在实自变量区域(函数g执行时的SP+4)中设定了局部变量目标的起始地址(函数g执行时的SP+8的地址值)。这样转换为基于引用传递的自变量接收传递方法,因此没有必要如示出了现有方法中的具体例的图12那样,进行自变量值的复制。这样,能削减代码量。
(具体例2)
图16A表示存储在程序存储单元56中的头文件的一个例子,图16B表示存储在程序存储单元56中的源程序的一个例子。以下,说明输入了该头文件和源程序的情况下的编译程序的动作。
在图16A所示的头文件“class.h”中描述了class A的定义。在class A中定义了数字变量x、y和z,缺省构造程序A(void),复制构造程序A(A&obj)、以及数字函数get_x、get_y、get_z、set_x、set_y和set_z。图16B所示的源程序“progr2.cc”中描述了头文件“class.h”的读入处理、值传递自变量函数“void f(Aobj)”的定义、调用函数f的函数“void g(void)”和函数“voidh(void)”的定义。
首先示出现有方法的具体例。与具体例1一样,函数f是“具有引用传递自变量的函数”,因此由函数g和函数h调用函数f时,自变量的接收传递成为基于值传递的方法。图17中表示由函数g调用函数f时的栈构架例。在图10B的函数g的定义中,将局部自变量x作为值传递自变量来调用函数f。局部自变量x在class A中被定义为复制构造程序(class.h的A(A&obj)),因此在基于值传递的自变量接收传递时,隐含进行基于复制构造程序调用的临时变量(temp.x、temp.y和temp.z)的生成。此时的栈构架如图17所示。即,从确保了局部变量的区域(函数g执行时的SP+28~SP+36)中由复制构造程序调用生成的值,存储在存储临时变量的区域(函数g执行时的SP+16~SP+24)中。之后,临时变量(自变量值)的副本被存储在确保实自变量的区域(函数g执行时的SP+4~SP+12)中。如果执行转移到函数f,则对自变量的存取能通过对确保伪自变量的区域的存取来实现。
图18表示用现有的方法实施的情况下的、表示函数f、函数g的汇编程序代码。如函数f的定义所示,伪自变量obj.x、obj.y、obj.z分别从栈构架的SP+16、SP+20、SP+24开始进行读入。另外,如函数g的定义所示,在函数f的调用之前,进行复制构造程序调用,将由复制构造程序调用而生成的值存储在临时变量区域之后,从临时变量区域(SP+16~SP+24)向实自变量区域(SP+4~SP+12)实施值的复制。
接着,表示本实施方式的具体例。首先,实施值传递自变量更新信息抽取处理(S11)时,抽取图19(a)所示的值传递自变量更新信息62。即,作为“具有值传递自变量的函数”抽取void f(Aobj)的信息,作为“直接调用具有值传递自变量的函数的函数”抽取void g(void)、void h(void)的信息,“有可能间接调用具有值传递自变量的函数的函数”抽取不存在的信息,在函数f中成为值传递对象的“值传递自变量”抽取第1自变量A obj的信息,在函数定义内自变量的更新抽取未进行的信息。
接着,实施值传递函数调用引用传递转换处理(S12),函数f的值传递自变量“A obj”在函数定义内被引用,但是未进行更新,因此与是否进行强制的引用传递的判断处理(S31)的结果无关,如图19(b)所示,第1自变量的“引用传递转换判断信息”被记录为“可能”。这样,值传递函数调用被转换为引用传递函数调用。
与实施值传递函数定义引用传递转换处理(S13)的情况一样,与是否进行强制的引用传递的判断处理(S51)的结果无关,结果记录为引用传递可能,因此基于函数f的值传递的自变量接收传递被转换为基于引用传递的函数传递。
由于已将基于值传递的自变量接收传递转换为基于引用传递的接收传递,因此栈构架与具体例1相同,如图14所示。
图16A和图16B的程序例所示的class A与图10A所示的结构A和数据结构相等。另外,图19(b)的值传递自变量更新信息62也与图13(b)相等,因此表示函数f、函数g的定义的汇编程序代码与具体例1相同,如图15所示。这样转换为基于引用传递的自变量接收传递方法,因此没有必要如图18所示的现有的方法中的汇编程序代码那样,进行基于复制构造程序的自变量值的副本生成和复制值向实自变量区域的存储处理。因此能削减代码量。
(具体例3)
图20A表示存储在程序存储单元56中的头文件的一个例子,图20B表示存储在程序存储单元56中的源程序的一个例子。以下,说明输入了该头文件和源程序的情况下的编译程序的动作。
图20A所示的头文件“struct.h”与图10A所示的头文件“struct.h”相同。另外,图20B所示的源程序“prog3.cc”与图10B所示的源程序“prog1.cc”大致相同,但是在函数f的定义中,在更新自变量obj(“obj.x=b;”“obj.y=c;”“obj.z=a;”)方面不同。此时的栈构架例与图11相同。图21表示用现有的方法实施的情况下的、表示函数f、函数g的定义汇编程序代码。与图12大致相同,但是在函数f的定义中,追加了更新自变量obj的处理。
接着,表示本实施方式的具体例。首先,实施值传递自变量更新信息抽取处理(S11)时,抽取图22(a)所示的值传递自变量更新信息62。即,作为“具有值传递自变量的函数”抽取void f(Aobj)的信息,作为“直接调用具有值传递自变量的函数的函数”抽取void g(void)、void h(void)的信息,“有可能间接调用具有值传递自变量的函数的函数”抽取不存在的信息,在函数f中成为值传递对象的“值传递自变量”抽取第1自变量A obj的信息,在函数定义内自变量的更新抽取已进行的信息。
接着,实施值传递函数调用引用传递转换处理(S12)时,函数f的值传递自变量“A obj”在函数定义内进行了更新,因此在强制的引用传递的判断(S31)中未进行强制转换的情况下,如图22(b)所示,第1自变量的“引用传递转换判断信息”被记录为“不可能”,不进行转换。另一方面,在进行强制转换的情况下,如图22(c)所示,第1自变量的“引用传递转换判断信息”被记录为“可能”,值传递函数调用被转换为引用传递函数调用。
与实施值传递函数定义引用传递转换处理(S13)的情况一样,在不进行强制的引用传递的情况下(S51为否),“引用传递转换判断信息”被记录为“不可能”,不进行转换。另一方面,在进行强制转换的情况下(S51为是),向引用传递的转换被记录为“可能”,基于函数f的自变量接收传递被转换为基于引用传递的函数接收传递。另外,由于存在值传递的更新,因此图9的S68的处理被实施,在更新处理前,由转换了的引用传递自变量引用自变量值生成副本,该副本被设定为引用目的地。
图23表示在值传递自变量在函数定义内已被更新的情况下,强制转换为引用传递时的栈构架例。在现有的方法的具体例中,在函数调用源中生成自变量值的副本,因此如图17所示,在函数调用源(即函数g的存取区域)中确保了副本,与此相对,在本发明中,在函数调用目的地中生成自变量值的副本,因此如图23所示,在函数调用目的地(即,函数f的存取区域)确保了副本。
图24表示在值传递自变量已被强制转换为引用传递自变量的情况下的、表示函数f、函数g的定义的汇编程序代码。在作为基于现有方法的具体例的图12中,在函数g的定义中和函数h的定义中,都生成自变量值的副本,并进行了自变量接收传递,与此相对,在本发明中,如图24所示,在函数g和函数h中实施对自变量值的由使用了地址的引用进行的自变量接收传递,在函数f的定义中生成自变量值的副本并设定为自变量值,这样,通过将自变量值的副本从调用源的函数移动至调用目的地的函数,虽然在值传递的函数调用产生时,必须生成自变量值的副本,但是能集中为值传递函数调用目的地的一次的副本生成。因此,能削减代码量。函数调用次数越多该效果越高。
如以上说明那样,根据本实施方式,将值传递自变量的函数和调用该函数的函数转换为引用传递自变量的函数和调用该函数的函数。因此,没有必要将自变量复制到栈构架中,能减小目标程序的代码量。
以上说明了本发明的实施方式所涉及的编译程序,但是本发明并不限于该实施方式。
例如,在上述的实施方式中,列举了使用栈构架的自变量传递的具体例,但是根据编译环境,也可以使用使用了寄存器等的自变量传递。
工业上的可利用性
本发明的编译方法可以应用于便携式电话和PDA(personalDigital Assistant)等需要代码量小的目标代码的嵌入式设备用的编译方法等。

Claims (20)

1.一种编译方法,将用高级语言描述的源程序转换为目标代码,其特征在于,包括以下步骤:
中间代码生成步骤,由源程序生成中间代码;
优化步骤,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将自变量的值传递转换为传递该自变量的保存场所的引用传递,由此优化上述中间代码;以及
目标代码转换步骤,将优化了的上述中间代码转换为目标代码。
2.如权利要求1所述的编译方法,其特征在于:
上述优化步骤,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将调用具有上述值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数,由此优化上述中间代码。
3.如权利要求2所述的编译方法,其特征在于:
还包括通过将基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递,由此优化上述中间代码的步骤。
4.如权利要求2所述的编译方法,其特征在于,上述优化步骤包括:
值传递自变量更新信息抽取子步骤,从上述中间代码中抽取值传递自变量更新信息,该值传递自变量更新信息至少包括具有值传递自变量的函数、直接调用具有该值传递自变量的函数的函数、有可能间接调用具有该值传递自变量的函数的函数、具有该值传递自变量的函数的值传递自变量、以及表示该值传递自变量在具有值传递自变量的函数的定义内是否已被更新的更新判断信息;以及
转换子步骤,根据上述值传递自变量更新信息,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将调用具有值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数。
5.如权利要求4所述的编译方法,其特征在于:
在上述转换子步骤中,在没有强制地使调用具有值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数的指定的情况下,根据上述值传递自变量更新信息,在没有有可能间接调用具有上述值传递自变量的函数的函数、并且上述值传递自变量在具有值传递自变量的函数的定义内未被更新的情况下,将直接调用具有上述值传递自变量的函数的函数转换为直接调用具有引用传递自变量的函数的函数。
6.如权利要求4所述的编译方法,其特征在于:
在上述转换子步骤中,在有强制地使调用具有值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数的指定的情况下,对于有该指定的具有值传递自变量的函数,根据上述值传递自变量更新信息,将直接地调用具有上述值传递自变量的函数的函数和有可能间接调用具有上述值传递自变量的函数的函数,分别转换为直接调用具有引用传递自变量的函数的函数和有可能间接调用具有引用传递自变量的函数的函数。
7.如权利要求1所述的编译方法,其特征在于:
上述优化步骤,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递,由此优化上述中间代码。
8.如权利要求7所述的编译方法,其特征在于,上述优化步骤包括:
值传递自变量更新信息抽取子步骤,从上述中间代码中抽取值传递自变量更新信息,该值传递自变量更新信息至少包括具有值传递自变量的函数、直接调用具有该值传递自变量的函数的函数、有可能间接调用具有该值传递自变量的函数的函数、具有该值传递自变量的函数的值传递自变量、以及表示该值传递自变量在具有值传递自变量的函数的定义内是否已被更新的更新判断信息;以及
转换子步骤,根据上述值传递自变量更新信息,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递。
9.如权利要求8所述的编译方法,其特征在于:
在上述转换子步骤中,在没有强制地使基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递的指定的情况下,根据上述值传递自变量更新信息,在没有有可能间接调用具有上述值传递自变量的函数的函数、并且上述值传递自变量在具有值传递自变量的函数的定义内未被更新的情况下,将基于具有上述值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递。
10.如权利要求8所述的编译方法,其特征在于:
在上述转换子步骤中,在有强制地使基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递的指定的情况下,对于有该指定的具有值传递自变量的函数,根据上述值传递自变量更新信息,将基于具有上述值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递,如果上述值传递自变量在函数定义内已被更新,则在上述中间代码中在实际被更新的部分之前,从已转换的引用传递自变量中引用自变量值来生成其副本,并将该副本设定为引用目的地。
11.一种编译装置,将用高级语言描述的源程序转换为目标代码,其特征在于,包括:
中间代码生成单元,由源程序生成中间代码;
优化单元,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将自变量的值传递转换为传递该自变量的保存场所的引用传递,由此优化上述中间代码;以及
目标代码转换单元,将优化了的上述中间代码转换为目标代码。
12.  如权利要求11所述的编译装置,其特征在于:
上述优化单元,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将调用具有上述值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数,由此优化上述中间代码。
13.如权利要求12所述的编译装置,其特征在于:
还包括通过将基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递,由此优化上述中间代码的单元。
14.如权利要求12所述的编译装置,其特征在于,上述优化单元包括:
值传递自变量更新信息抽取单元,从上述中间代码中抽取值传递自变量更新信息,该值传递自变量更新信息至少包括具有值传递自变量的函数、直接调用具有该值传递自变量的函数的函数、有可能间接调用具有该值传递自变量的函数的函数、具有该值传递自变量的函数的值传递自变量、以及表示该值传递自变量在具有值传递自变量的函数的定义内是否已被更新的更新判断信息;以及
转换单元,根据上述值传递自变量更新信息,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将调用具有值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数。
15.如权利要求14所述的编译装置,其特征在于:
上述转换单元,在没有强制地使调用具有值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数的指定的情况下,根据上述值传递自变量更新信息,在没有有可能间接调用具有上述值传递自变量的函数的函数、并且上述值传递自变量在具有值传递自变量的函数的定义内未被更新的情况下,将直接调用具有上述值传递自变量的函数的函数转换为直接调用具有引用传递自变量的函数的函数。
16.如权利要求14所述的编译装置,其特征在于:
上述转换单元,在有强制地使调用具有值传递自变量的函数的函数转换为调用具有引用传递自变量的函数的函数的指定的情况下,对于有该指定的具有值传递自变量的函数,根据上述值传递自变量更新信息,将直接地调用具有上述值传递自变量的函数的函数和有可能间接调用具有上述值传递自变量的函数的函数,分别转换为直接调用具有引用传递自变量的函数的函数和有可能间接调用具有引用传递自变量的函数的函数。
17.如权利要求11所述的编译装置,其特征在于:
上述优化单元,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递,由此优化上述中间代码。
18.如权利要求17所述的编译装置,其特征在于,上述优化单元包括:
值传递自变量更新信息抽取单元,从上述中间代码中抽取值传递自变量更新信息,该值传递自变量更新信息至少包括具有值传递自变量的函数、直接调用具有该值传递自变量的函数的函数、有可能间接调用具有该值传递自变量的函数的函数、具有该值传递自变量的函数的值传递自变量、以及表示该值传递自变量在具有值传递自变量的函数的定义内是否已被更新的更新判断信息;以及
转换单元,根据上述值传递自变量更新信息,在没有有可能间接调用具有值传递自变量的函数的函数、并且上述值传递自变量在具有该值传递自变量的函数的定义内未被更新的情况下,将基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递。
19.如权利要求18所述的编译装置,其特征在于:
上述转换单元,在没有强制地使基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递的指定的情况下,根据上述值传递自变量更新信息,在没有有可能间接调用具有上述值传递自变量的函数的函数、并且上述值传递自变量在具有值传递自变量的函数的定义内未被更新的情况下,将基于具有上述值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递。
20.如权利要求18所述的编译装置,其特征在于:
上述转换单元,在有强制地使基于具有值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递的指定的情况下,对于有该指定的具有值传递自变量的函数,根据上述值传递自变量更新信息,将基于具有上述值传递自变量的函数的值传递而进行的自变量接收传递转换为基于引用传递的自变量接收传递,如果上述值传递自变量在函数定义内已被更新,则在上述中间代码中在实际被更新的部分之前,从已转换的引用传递自变量中引用自变量值来生成其副本,并将该副本设定为引用目的地。
CNB2004101037298A 2003-12-22 2004-12-22 编译方法、编译装置及编译程序 Active CN100476732C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2003424043A JP4652680B2 (ja) 2003-12-22 2003-12-22 コンパイル方法および装置、ならびにコンパイラ
JP424043/2003 2003-12-22

Publications (2)

Publication Number Publication Date
CN1637708A CN1637708A (zh) 2005-07-13
CN100476732C true CN100476732C (zh) 2009-04-08

Family

ID=34675385

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2004101037298A Active CN100476732C (zh) 2003-12-22 2004-12-22 编译方法、编译装置及编译程序

Country Status (3)

Country Link
US (1) US7458071B2 (zh)
JP (1) JP4652680B2 (zh)
CN (1) CN100476732C (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100683853B1 (ko) * 2005-02-04 2007-02-16 삼성전기주식회사 프리 컴파일링 장치
US7861234B1 (en) * 2005-02-23 2010-12-28 Oracle America, Inc. System and method for binary translation to improve parameter passing
US7802239B2 (en) * 2005-11-09 2010-09-21 Oracle America, Inc. Supporting method references in the JAVA language
EP1818814A1 (en) * 2006-02-07 2007-08-15 Alexandr Savinov Method for indirect representation and access in an object-oriented programming language
US20080127142A1 (en) * 2006-11-28 2008-05-29 Microsoft Corporation Compiling executable code into a less-trusted address space
US8806503B2 (en) * 2011-01-24 2014-08-12 Nec Laboratories America, Inc. Method and system for memory aware runtime to support multitenancy in heterogeneous clusters
EP2687981B1 (en) * 2012-07-18 2017-12-27 MStar Semiconductor, Inc. Automated compiler specialisation for global optimisation
WO2014031540A1 (en) * 2012-08-20 2014-02-27 Cameron Donald Kevin Processing resource allocation
US9329844B2 (en) * 2014-05-30 2016-05-03 Apple Inc. Programming system and language for application development
WO2016089243A1 (en) * 2014-12-04 2016-06-09 Huawei Technologies Co., Ltd Compiler and method for compiling source code
JP6651974B2 (ja) 2016-05-10 2020-02-19 富士通株式会社 情報処理装置、コンパイル方法及びコンパイラプログラム
US10241764B2 (en) 2017-05-05 2019-03-26 National Instruments Corporation Automatically transform pass-by-value semantics into pass-by-reference implementation
CN109240666B (zh) * 2018-06-22 2020-08-25 北京大学 基于调用栈和依赖路径的函数调用代码生成方法及系统
CN109491667A (zh) * 2018-12-21 2019-03-19 芯海科技(深圳)股份有限公司 一种c语言编译效率优化的方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0535491A (ja) * 1991-07-31 1993-02-12 Oki Electric Ind Co Ltd Fortran言語からc言語への変換における引数変換方法
US6481007B1 (en) * 1999-06-03 2002-11-12 Oracle Corporation Optimizing parameter passing
US7155728B1 (en) * 2001-06-28 2006-12-26 Microsoft Corporation Remoting features
JP2003050700A (ja) * 2001-08-06 2003-02-21 Matsushita Electric Ind Co Ltd プログラム変換方法
US7356812B2 (en) * 2003-09-30 2008-04-08 Intel Corporation Passing parameters by implicit reference

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
用visual c++2.0编译器优化程序代码. 田培彦(译).电脑编程技巧与维护,第2期. 1996
用visual c++2.0编译器优化程序代码. 田培彦(译).电脑编程技巧与维护,第2期. 1996 *

Also Published As

Publication number Publication date
US20050138612A1 (en) 2005-06-23
CN1637708A (zh) 2005-07-13
JP4652680B2 (ja) 2011-03-16
US7458071B2 (en) 2008-11-25
JP2005182562A (ja) 2005-07-07

Similar Documents

Publication Publication Date Title
CN100476732C (zh) 编译方法、编译装置及编译程序
CN100498711C (zh) 自动翻译程序和程序翻译服务器
US7992127B2 (en) Method and system of encapsulating web site transactions for computer-aided generation of web services
CN100543724C (zh) 提供和处理可执行网页内容的系统和方法
US8051405B2 (en) System and method for build script generation in a software development environment
CN105022630B (zh) 一种组件管理系统及组件管理方法
CN101383871B (zh) 一种网元配置的实现方法及装置
CN105765527A (zh) 用于定制的软件开发包(sdk)的方法和装置
CN100511143C (zh) 安装包生成装置及方法、以及安装进度传递方法
CN107168749A (zh) 一种编译方法、装置、设备和计算机可读存储介质
CN101866315B (zh) 软件开发工具的测试方法及系统
CN102495797A (zh) 智能卡测试装置和测试方法
KR20050024827A (ko) 타겟 시스템 기반 소스 프로그램 개발장치 및 방법
CN115407977A (zh) 一种信息编译方法、装置、设备及计算机可读存储介质
US20050028139A1 (en) Information processing method, apparatus and program in XML driven architecture
CN112419057A (zh) 智能合约的日志生成及保存方法、装置、设备和存储介质
US20160179570A1 (en) Parallel Computing Without Requiring Antecedent Code Deployment
CN112988165A (zh) 基于Kubernetes的交互式建模方法、装置、电子设备及存储介质
CN113778897A (zh) 接口的自动测试方法、装置、设备及存储介质
CN114816672A (zh) 虚拟机的创建方法、装置、电子设备和存储介质
CN112799652A (zh) 一种客户端构建方法、装置、电子设备及存储介质
CN116719735A (zh) 一种测试用例生成方法及装置
CN110334031A (zh) 内存分配代码检测方法、装置、计算机设备及存储介质
Genova et al. A prototype of a web-based decision support system for building models and solving optimization and decision making problems
KR102621742B1 (ko) 노코드 기반 자동화 서비스 플랫폼을 이용한 자동화서비스 시스템과 그 방법 및 컴퓨터 프로그램

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20151111

Address after: Kanagawa

Patentee after: Co., Ltd. Suo Si future

Address before: Osaka Japan

Patentee before: Matsushita Electric Industrial Co., Ltd.