"); //-->
GE IC670CHS001E 用于对象创建和消息传递
GE IC670CHS001E 用于对象创建和消息传递
独特的是,面向对象的范例包括动态存储分配从堆存储用于对象创建和消息传递。1994年的基准测试“大型C和C++程序中的内存分配成本”数字设备公司在各种软件上,使用指令级分析工具,测量每个动态存储分配需要多少条指令。结果显示,执行的指令的最低绝对数量平均约为50条,但其他指令高达611条。[18]另见穆拉利·克里希南的《堆:快乐与痛苦》[19]这说明“堆实现倾向于对所有平台保持通用,因此有很大的开销”。IBM的Arun Iyengar在1996年发表的论文“动态存储分配算法的可伸缩性”[20]演示各种动态存储算法及其各自的指令计数。甚至推荐的MFLF I算法(H.S. Stone,RC 9674)也显示指令计数在200到400之间。上述伪代码示例不包括对该内存分配路径长度或所涉及的内存前缀开销以及后续相关垃圾收集开销的实际估计。强烈暗示堆分配是一项重要的任务开源软件微分配器,由游戏开发者开发约翰·拉特克利夫,由近1000行代码组成。[21]
动态调度的消息调用与直接过程调用开销[编辑]在他们的摘要中"利用静态类层次分析优化面向对象程序",[22]的计算机科学与工程系的杰弗里·迪恩、戴维·格罗夫和克雷格·钱伯斯华盛顿大学,声称“大量使用继承和动态绑定消息很可能使代码更具可扩展性和可重用性,但是相对于以非面向对象方式编写的等价但不可扩展的程序,它也强加了显著的性能开销。在某些领域,比如结构化图形包,使用高度面向对象的风格所提供的额外灵活性的性能代价是可以接受的。然而,在其他领域,如基本数据结构库、数值计算包、渲染库和跟踪驱动的模拟框架,消息传递的成本可能太大,迫使程序员避免在应用程序的“热点”进行面向对象编程
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。