用于冻结对象的类型描述符管理的制作方法

文档序号:6594729阅读:128来源:国知局
专利名称:用于冻结对象的类型描述符管理的制作方法
用于冻结对象的类型描述符管理背景面向对象的编程的最基本构件块被称为“对象”。一般而言,对象具有零个或多个方法和零个或多个成员字段。因此,为了由计算系统正确地解释,对象应该是由计算系统理解的特定类型。原语类型包括编程语言本身作为基本构件块向程序员提供的类型。原语类型的示例可以包括字符、串、整数、浮点数、数组等等。编程语言通常允许程序员构造表示构成类型的组合的合成类型,无论这些构成类型是原语类型还是其他合成类型。这些合成类型可能是相当复杂的。知道特定对象的类型常常是有利的。因此,在执行期间,在存储器中,对象常常具有相关联的类型描述符。在一个示例中,对象具有指向更完整的类型描述符的类型描述指针。类型描述符可出于各种目的来使用。其一,可以评估对象的类型描述符以便验证特定操作可以由该对象来执行,或者来确定该对象是与另一对象相同或等价的类型。一种特定种类的对象被称为“冻结对象”。冻结对象实例是在编译时完成其布局并作为经编译的映像的一部分来包括的对象实例。在运行时期间不遭受广泛的或可能任何改变的对象可能是对象冻结的最佳候选,但可以冻结具有预初始化数据的任何对象实例。例如,日历程序可以提供从1000个预定语录之中选择的日常有灵感的语录。这1000个预定语录中的每一个可以用类型串的冻结对象来表示。模块内的指令可以指的是冻结对象。在运行时,冻结对象连同模块的许多或所有其他部分一起被加载到存储器中。然而,在运行时没有必要新分配冻结对象。简要概述本文描述的各实施例涉及对冻结对象的类型描述符的高效使用。在一个实施例中,冻结对象实际上可以包括多个类型描述符,即,根据一组规范化规则是规范的主类型描述符,以及与主类型描述符不相同的辅助类型描述符。辅助类型描述符可被用来访问规范类型描述符。在执行操作时,如果辅助类型描述符可用于执行该操作,则使用该辅助类型描述符来执行该操作。如果要使用规范主类型描述符来执行该操作,则使用辅助类型描述符来获取对规范主类型描述符的访问权。随后使用主类型描述符来执行该操作。本概述不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。附图简述为了描述可以获得本发明的上文所列举的及其他优点和特征的方式,下面将通过参考附图来呈现对各实施例的更具体的描述。可以理解,这些附图只描绘了样本实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加特性和细节来描述和解释各实施例,在附图中

图1示出了可实现本文描述的多个特征之一的计算系统;图2示出可对冻结对象使用类型描述的体系结构;图3示出一种用于使用对应于冻结对象的多个类型描述符来执行一个或多个类型操作的方法的流程图4示出一种用于使用辅助类型描述符来访问规范类型描述符的示例方法的流程图;以及图5示出一种用于准备使用间接组件来允许访问规范类型描述符的方法的流程图。详细描述根据本文描述的各实施例,本文描述的各原理允许对冻结对象高效地使用类型描述符。首先,其中可以采用本文描述的各原理的计算系统的各实施例。随后,将参考图2到图5来描述用于冻结对象的类型描述符的使用的各实施例。图1示出了计算系统100。计算系统现在越来越多地采取各种形式。计算系统可以例如是手持式设备、电器、膝上型计算机、台式计算机、大型机、分布式计算系统,或者甚至通常不被视为计算系统的设备。在本说明书以及权利要求书中,术语“计算系统”被广义地定义为包括包含至少一个处理器以及其上能含有可由处理器执行的计算机可执行指令的存储器的任何设备或系统(或其组合)。存储器可以采取任何形式,并可以取决于计算系统的特性和形式。计算系统可以分布在网络环境中,并可包括多个组成计算系统。如图1所示,在其最基本的配置中,计算系统100通常包括至少一个处理单元102 和存储器104。存储器104可以是物理系统存储器,可以是易失性、非易失性、或两者的某种组合。术语“存储器”在此也可用来指诸如物理存储介质等非易失性大容量存储。如果计算系统是分布式的,那么,处理、存储器和/或存储能力也可以是分布式的。如此处所使用的, 术语“模块”或“组件”可以指在计算系统上执行的软件对象或例程。此处所描述的不同组件、模块、引擎,以及服务可以被实现为在计算系统上执行的对象或进程(例如,作为分开的线程)。在随后的描述中,参考由一个或多个计算系统执行的动作描述了各实施例。如果这样的动作是以软件实现的,则执行动作的相关联计算系统的一个或多个处理器响应于已经执行了计算机可执行指令,引导计算系统的操作。这样的操作的示例涉及对数据的操纵。 计算机可执行指令(以及被操纵的数据)可以存储在计算系统100的存储器104中。计算系统100还可包含允许计算系统100例如通过网络110与其他消息处理器通信的通信信道108。通信信道108是通信介质的示例。通信介质通常以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并包括任何信息递送介质。作为示例而非限制,通信介质包括有线介质,如有线网络或直接线连接,以及诸如声学、无线电、红外线及其他无线介质之类的无线介质。如此处所用的术语“计算机可读介质”既包括存储介质又包括通信介质。本发明的范围内的实施例还包括用于携带或其上储存有计算机可执行指令或数据结构的计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机访问的任何可用介质。作为示例而非限制,这样的计算机可读介质可包括诸如RAM、ROM、EEPROM、 CD-ROM之类的物理存储器和/或存储介质或其他光盘存储、磁盘存储或其他磁存储设备、 或可用于携带或存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。当信息通过网络或另一通信连接(硬连线、无线或硬连线或无线的组合)传输或提供给计算机时,计算机将该连接完全视为计算机可读介质。 因此,任何这样的连接被适当地称为计算机可读介质。上述的组合也应被包括在计算机可读介质的范围内。计算机可执行指令例如包括,使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于此处所描述的具体特征或动作。相反,此处所描述的具体特征和动作是作为实现权利要求的示例形式来公开的。图2示出其中类型描述可高效地用于冻结对象的体系结构200。如先前所述,“冻结对象”是在编译时分配的对象,并因此作为经编译的可执行文件中的对象存在。因此,在加载来准备执行时,冻结对象连同映像文件的其他组件的潜在的其他部分或可能全部一起被加载到存储器中。通常,它可能是可用冻结对象来表示的静态数据。即,本文描述的各原理不限于一旦被加载到存储器中就无法修改的冻结对象的使用。然而,本文的某些实施例减少或消除了写入冻结对象的存储器中的表示的必要。这是有利的,因为写入存储器可以使得存储器中被写入的部分(被称为页)成为“专用”的。即,写入该页的进程迫使创建该页的专用副本。体系结构200包括定义模块210和引用模块220。在本说明书中,“模块”可以是被加载到存储器中的可执行映像。例如,参考图1和2,模块210和220可以从存储(存储器104的非易失性部分)被加载到存储器(存储器104的易失性部分)中。定义模块210被称为“定义”是因为它包含与特定类型相对应的并定义特定类型的主类型描述符211。在一个实施例中,主类型描述符211按照满足一组规范化规则的方式来定义特定类型。也可以存在其他类型的规范化类型描述符。然而,为了避免图2的过度复杂,只示出了一种类型的类型描述符。引用模块220被称为“引用”是因为它包含由主类型描述符定义的类型的冻结对象222。引用模块220因此在某种意义上间接地引用主模块210中的主类型描述符。具体地,引用模块222包括与由主类型描述符211定义的相同特定类型相对应的并定义该相同特定类型的辅助类型描述符221。引用模块222还包括足够的信息来提供冻结对象222和辅助类型描述符221之间的关联223。辅助类型描述符211与规范主类型描述符221不相同。例如,辅助类型描述符221 在它可以不遵循主类型描述符211所遵循的一组规范规则中的每一条规范规则的意义上可以不是规范类型描述符。然而,在一个实施例中,辅助类型描述符221在本质上可以是主类型描述符211的克隆副本,除了可能带有足够的信息来将主类型描述符和辅助类型描述符彼此区分。在另一实施例中,辅助类型描述符221包括足够的信息从而使得用辅助类型描述符221可以执行至少一种类型操作,而非必须引用规范主类型描述符211。冻结对象222和辅助类型描述符221之间的关联223可以是例如冻结对象本身中的类型描述符指针。例如,在对象以类型描述指针开始的实施例中,冻结对象也能以类型描述指针开始。然而,替代指向主类型描述符,冻结对象222改为指向辅助类型描述符221。 如果主类型描述符211相反被包括在模块220中,则冻结对象221可改为直接地指向主类型描述符211。然而,在编译引用模块220时,可能没有足够的信息来使得冻结对象直接指向不同模块中的主类型描述符。体系结构200还包括间接组件230,辅助类型描述符221通过该间接组件230与主类型描述符211相关联。在一个实施例中,间接组件230是导入地址表并且甚至可以是引用模块220本身的一部分。导入地址表的一个单元可被用作主类型描述符211和辅助类型描述符221之间的间接点。虽然图2中只示出了一种类型,但间接组件可用于多种类型。在一个实施例中,使用间接组件230来如下将两个类型描述符相关联。首先,可能在编译时,辅助类型描述符包括该类型描述符是辅助的且不是主要的某些指示。这意味着修改辅助类型描述符221的各字段之一来包括指向间接组件231的相对应的部分的指针, 如箭头230所示。在运行时,随后修改间接组件230的适当部分来包括指向相对应的主类型描述符211的指针(由箭头232表示)。因此,通过使用辅助类型描述221和间接组件 230中的指针,辅助类型描述符221可用于访问主类型描述符211。另外,就可以使用与冻结对象相同模块中的辅助类型描述符来对该冻结对象执行类型操作而言,只使用一层间接来访问辅助类型描述符。在一个实施例中,可能只可对间接组件写入一次,不使被写入的那些页变为专用的。即使写操作不将被写入的间接组件的部分变为专用的,但间接组件230可以被聚类成较少数量的页。因此,与要对模块220本身中的较分散的类型描述指针作出相似数量的写入的情形相比,可以使得较少的页成为专用的。环境200还包括执行类型操作的操作管理组件M0。在这样做时,操作管理组件确定辅助类型描述符是否足以执行该类型操作,或者是否需要主类型描述符来执行该类型操作。作为示例,图3示出一种用于使用对应于冻结对象的多个类型描述符来执行一个或多个类型操作的方法300的流程图。例如,如果冻结对象是图2的冻结对象222,则多个类型描述将包括主类型描述符211和辅助类型描述符221。在一个实施例中,操作管理组件240 可以简单地是应用程序、操作系统或其部分。首先,对于每一操作,组件240确定辅助类型描述符是否足以执行操作(判定框 301)。对于一个或多个类型操作,可以确定辅助类型描述符将足以执行该操作(判定框301 中的是)。在这种情况下,使用辅助类型描述符来执行该操作(动作30幻。在某些情况下, 类型操作可以要求在冻结对象和类型描述之间只存在一层间接。从冻结对象指向辅助类型描述符的指针表示该情况下的该一层间接。因此,可以在不过度地增加复杂性以通过附加间接来访问主类型描述符的情况下执行这些操作。可以仅使用辅助类型描述符来执行的并且可能只期待在对象和类型描述符之间只有一层间接的操作类型的示例,包括虚调用操作或接口调用操作。另外,在某些情况下, 两个对象之间的类型比较可以通过比较每一对象中的类型描述符指针来作出。如果指针匹配,则不管它们是指向主类型描述符还是辅助类型描述符,它们都指代同一类型。在一个实施例中,所执行的全部类型操作中的相当比例可以通过仅使用辅助类型描述符来满足。因此,这些操作可以在甚至不必寻找主类型描述符的情况下相当高效地执行。对于一个或多个其他操作,可以确定辅助类型描述符不足以执行该操作(判定框 301中的否)。在这种情况下,使用辅助类型描述符来访问规范主类型描述符(动作303)。 随后,可以使用主类型描述符来执行该操作(动作304)。作为可能需要访问主类型描述符的类型操作的示例,假设在两个对象之间再次执行类型比较操作。然而在这种情况下,如果类型描述符指针不匹配,并且确定对象中的至少一个指向辅助类型描述符,则访问对应于任何辅助类型描述符的主类型描述符,并使用该主类型描述符来验证类型匹配。在一个实施例中,需要访问主类型描述符的类型操作的比例与可以仅使用辅助类型描述符来完成的操作类型的比例相比可能相对较小。图4示出一种使用辅助类型描述符来访问规范类型描述符的示例方法400的流程图。可以采用其他方法来从辅助类型描述符访问主类型描述符。然而,方法400作为一个示例是合适的。访问辅助类型描述符内的指针(动作401)。该指针直接或间接指向主类型描述符。例如,在图2的情况下,辅助类型描述符的指针指向(如箭头231所示)间接组件中的适当单元。随后使用间接组件的单元中的指针(参见箭头23 来访问主规范类型描述符 (动作402)。因此,即使多个类型描述符对应于单个对象,并且即使特定对象的主类型描述符驻留在冻结对象被分配到的模块之外,也可以有效地使用类型描述符。此外,通过合并对间接组件的写操作,写操作在运行时可以更同一,从而最小化并可能消除由于这些写操作而导致的页的专用化。图5示出一种用于准备使用间接组件来允许访问规范类型描述符的方法500的流程图。该方法500可以在加载以准备执行时执行。在执行该方法之前,在编译时,可能已经设置了从冻结对象指向辅助类型描述符的指针以及从辅助类型描述符指向间接组件的指针。然而,为了完成到主类型描述符的间接路径,设置从间接组件指向主类型描述符的指针。为此,确定对应于间接组件的适当单元的类型(动作501)。随后确定该类型对应于主类型描述符(动作502)。响应于该匹配操作,随后修改间接组件来包括指向规范类型描述符的指针(动作50;3)。因此,在该实施例中,在编译时期间创建了间接路径的一部分, 并且在运行时创建间接路径的最后一部分。这允许在部署时主类型描述符相对于其他可执行模块中的冻结对象的位置的灵活性。因此,只要主类型描述符存在于可执行模块集合中的某处,该集合中的任何位置的冻结对象便可正确地引用(即使是间接地)该主类型描述符。本发明可具体化为其它具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变应被权利要求书的范围所涵盖。
权利要求
1.一种包含其上具有可执行模块(220)的一个或多个计算机可读介质(104)的计算机程序产品,所述可执行模块包括冻结对象022),所述冻结对象022)是由符合一组规范化规则的规范类型描述符 (211)规范地描述的类型的实例;辅助类型描述符021),所述辅助类型描述符021)与所述规范类型描述符不相同,但至少对于使用所述类型的类型描述符的操作中的某一些,所述辅助类型描述符也用作所述冻结对象的类型描述符;其中所述冻结对象直接或间接地与所述辅助类型描述符和所述规范类型描述符相关联。
2.如权利要求1所述的计算机程序产品,其特征在于,所述规范类型描述符不存在于所述可执行模块中。
3.如权利要求2所述的计算机程序产品,其特征在于,所述规范类型描述符存在于所述计算机程序产品上。
4.如权利要求1所述的计算机程序产品,其特征在于,所述冻结对象通过包括指向所述辅助类型描述符的指针来与所述辅助类型描述符相关联。
5.如权利要求1所述的计算机程序产品,其特征在于,所述间接组件是这样一种组件 该组件可在运行时被写入从而使得所述间接组件在不使得所述间接组件或其部分变为专用的情况下指向所述规范化的类型描述符。
6.如权利要求1所述的计算机程序产品,其特征在于,所述间接组件是这样一种组件 该组件可在运行时被一次写入从而使得所述间接组件在不使得所述间接组件或其部分变为专用的情况下指向所述规范化的类型描述符。
7.如权利要求1所述的计算机程序产品,其特征在于,所述间接组件是导入地址表。
8.一种用于使用对应于冻结对象022)的多个类型描述(211、221)来执行一个或多个类型操作的方法(300),所述多个类型描述包括符合一组规范化规则的规范类型描述符 011),所述方法包括对于第一组一个或多个操作,确定(301)辅助类型描述符021)将足以执行所述操作的动作,以及使用(30 所述辅助类型描述符但不使用所述规范类型描述符来执行所述操作的动作;以及对于第二组一个或多个操作,确定(301)所述辅助类型描述符不足以执行所述操作的动作,使用(303)所述辅助类型描述符来访问所述规范类型描述符的动作;以及使用(304) 所述规范类型描述符来执行所述操作的动作。
9.如权利要求8所述的方法,其特征在于,所述使用所述辅助类型描述符来访问所述规范类型描述符的动作包括访问所述辅助类型描述符内的指针的动作,其中所述指针直接或间接地指向所述规范类型描述符。
10.如权利要求8所述的方法,其特征在于,所述使用所述辅助类型描述符来访问所述规范类型描述符的动作包括访问所述辅助类型描述符内的指针的动作,其中所述指针直接或间接地指向包括直接或间接地指向所述规范类型描述符的指针的间接组件;以及使用所述间接组件中的指针来访问所述规范类型描述符的动作。
11.如权利要求10所述的方法,其特征在于,还包括准备使用所述间接组件来允许访问所述规范类型描述符的动作。
12.如权利要求11所述的方法,其特征在于,所述准备动作包括 确定对应于所述间接组件的类型的动作;确定所述类型对应于所述规范类型描述符的动作;以及修改所述间接组件来包括指向所述规范类型描述符的指针的动作。
13.如权利要求8所述的方法,其特征在于,所述第二组操作中的至少一个包括所述冻结对象的类型与另一对象的类型的比较。
14.如权利要求8所述的方法,其特征在于,所述第一组操作中的至少一个要求所述冻结对象和用于执行所述操作的所述类型描述符之间只存在一层间接。
15.如权利要求8所述的方法,其特征在于,所述第一组操作中的至少一个是虚调用操作。
全文摘要
对冻结对象的类型描述符的高效使用。冻结对象实际上可以包括多个类型描述符,即,根据一组规范化规则是规范的主类型描述符,以及与主类型描述符不相同的辅助类型描述符。可以使用辅助类型描述符来访问规范类型描述符。在执行操作时,如果可以使用辅助类型描述符来执行该操作,则可使用该辅类型描述符。如果要使用规范主类型描述符来执行该操作,则使用辅类型描述符来获取对规范主类型描述符的访问权。随后使用主类型描述符来执行该操作。
文档编号G06F9/06GK102203757SQ200980135192
公开日2011年9月28日 申请日期2009年8月19日 优先权日2008年9月3日
发明者A·帕多, F·V·佩斯彻-盖里, M·M·马格鲁德, M·泰鲁利, P·F·索利趣, P·H·杜斯德, R·马丁, S·D·莫热, S·J·霍尔 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1