×

量化和评估替代C++内存布局的空间开销。 (英语) Zbl 1037.68024号

摘要:本文开发了一种形式主义,它精确地描述了C++内存布局需要类表时的特征。内存布局是一种特殊的数据结构选择,用于实现面向对象语言的运行时支持。我们使用这种形式来在一组基准上量化和评估一组C++内存布局的空间开销。特别地,本文研究了由于三种语言特性导致的空间开销:虚拟调度、虚拟继承和动态类型。迄今为止,还没有对C++内存布局进行科学量化或评估。我们的方法可以帮助C++实现者。这项工作已经影响了IBM的Visual Age C++V5编译器中的内存布局设计选择。
将我们的方法应用于一组五个基准测试,我们证明了面向对象的空间开销的影响在不同的应用程序之间可能会有很大差异(对于我们的基准测试,范围从0.42%到99.79%)。特别是,如果应用程序的对象空间由大量使用面向对象语言功能的类的实例控制,那么内存布局的选择将对其产生重大影响。

MSC公司:

68甲15 编程语言理论
PDF格式BibTeX公司 XML格式引用
全文: 内政部

参考文献:

[1] 具有多重派生和虚基的基类组合。第六届Usenix C++技术会议。USENIX协会:伯克利,1994年。
[2] C++中接口和实现的分离。C++会议,马萨诸塞州剑桥市,1991年4月。USENIX协会:伯克利,1991年;51-62.
[3] 接口转换和实现过滤。C++会议,马萨诸塞州剑桥,1991年4月。USENIX协会:伯克利,1991年;227-236.
[4] 用于多重继承的节省空间和时间的内存布局。面向对象编程系统、语言和应用会议(OOPSLA),1999年10月。ACM出版社:纽约,1999年;256-275.
[5] C++的多重继承。1987年春季欧洲Unix系统用户小组会议记录,赫尔辛基,1987年5月。USENIX协会:伯克利,1987年。
[6] 库存硬件的快速调度机制。1988年ACM面向对象编程系统、语言和应用(OOPSLA)会议记录,加利福尼亚州圣地亚哥,1988年10月。ACM出版社:纽约,1988年;27-35.
[7] 用于具有多重继承的编译语言的快速方法调度程序。1989年ACM面向对象编程系统、语言和应用(OOPSLA)会议记录,洛杉矶新奥尔良,1989年10月。ACM出版社:纽约,1989年;211-214.
[8] 带注释的C++参考手册。Addison-Wesley,1990年。
[9] C++虚拟函数调用的快速静态分析。第十一届面向对象编程系统、语言和应用年会。OOPSLA’96,加利福尼亚州圣何塞,1996年10月。ACM出版社:纽约,1996年;324-341. ·数字对象标识代码:10.1145/236337.236371
[10] 模块-3程序的简单有效的链接时间优化。SIGPLAN’95编程语言设计与实现会议,1995年6月。ACM出版社:纽约,1995年;103-115.
[11] 消除C++程序中的虚拟函数调用。第十届欧洲面向对象编程会议记录?ECOOP’96,奥地利林茨,1996年7月(计算机科学讲义,第1098卷)。施普林格:纽约,1996年;142-166.
[12] 减少C++程序中的间接函数调用开销。第21届ACM SIGACT-SIGPLAN编程语言原理年度研讨会,俄勒冈州波特兰,1994年1月。ACM出版社:纽约,1994年;397-408.
[13] C++虚拟函数调用的编译器优化。第二届面向对象技术和系统会议记录,加拿大多伦多,1996年6月。USENIX协会:伯克利,1996年;3-14.
[14] 使用静态类层次分析优化面向对象程序。第九届欧洲面向对象编程会议记录?ECOOP’95,丹麦奥胡斯,1995年8月,(编辑)。施普林格:纽约,1995年;77-101.
[15] 类型反馈与具体类型推断:面向对象语言优化技术的比较。1995年ACM面向对象编程系统、语言和应用(OOPSLA)会议记录,德克萨斯州奥斯汀,1995年10月。ACM出版社:纽约,1995年;91-107.
[16] 创建节省空间的调度表的快速算法,并应用于多调度。第十七届ACM面向对象编程系统、语言和应用会议记录,2002年11月。ACM出版社:纽约,2002年;142-160.
[17] 用于评估c++对象模型的空间和时间开销的框架。技术报告RC 20421,IBM Thomas J.Watson研究中心,1996年3月。
[18] C++对象模型内部。艾迪森·韦斯利:纽约,1996年。
[19] 评估C++的虚拟调度机制。技术报告RC 20330,IBM Thomas J.Watson研究中心,1996年1月。
[20] 微软公司和数字设备公司。组件对象模型规范,0.9版,1995年10月。
[21] Java?语言规范(Java?系列)。Addison-Wesley,1996年·Zbl 0865.68001号
[22] 用于单独编译的双向对象布局。1995年ACM面向对象编程系统、语言和应用(OOPSLA)会议记录,德克萨斯州奥斯汀,1995年10月。ACM出版社:纽约,1995年;124-139.
[23] 用于多重继承的双向记录布局。SIGPLAN编程语言设计与实现(PLDI)会议记录,纽约州怀特普莱恩斯,1990年6月。ACM出版社:纽约,1990年;85-91.
[24] 子对象的代数语义。第十届面向对象编程系统、语言和应用年会。1995年10月,德克萨斯州奥斯汀,OOPSLA’95。ACM出版社:纽约,1995年;187
[25] 认可标准委员会。信息系统国际标准草案工作文件?编程语言C++,1997年11月。文件。编号:X3J16/97-0108 WG21/N1146。
[26] 用于实现虚拟函数和虚拟基类以及为面向对象编程语言设置此指针的方法和系统。美国专利52972841994年3月。受让人Microsoft Corporation。
[27] Hind,《美国计算机学会编程语言与系统汇刊》21,第848页–(1999年)
[28] 蒙大拿州的体系结构:一个开放的、可扩展的编程环境,带有增量C++编译器。《软件工程基础学报》,1998年11月。ACM出版社:纽约,1998年;131-142.
[29] C++应用程序中死数据成员的研究。1998年6月于加拿大蒙特利尔举行的ACM SIGPLAN’98编程语言设计与实现会议(PLDI’98)会议记录。ACM出版社:纽约,1998年;324-333. ACM SIGPLAN通知33(6)。
此参考列表基于出版商或数字数学图书馆提供的信息。其项与zbMATH标识符进行启发式匹配,可能包含数据转换错误。在某些情况下,zbMATH Open的数据对这些数据进行了补充/增强。这试图尽可能准确地反映原始论文中列出的参考文献,而不要求完整或完全匹配。