Fortran Coder

查看: 1068|回复: 6
打印 上一主题 下一主题

[面向对象] 面向对象的性能问题

[复制链接]

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2023-10-29 11:15:03 | 显示全部楼层
首先 OOP 必然有性能上的牺牲。
牺牲具体有多大,可能与编译器,优化选项,算法,算例等诸多因素有关。

计算密集型的函数过程,采用面向过程的确可能效率会明显高很多。

但OOP有它的优势,例如代码管理上的逻辑清晰(更符合人们对真实世界事物的分类感知),更重要的是,同一个类可以同时有多个对象。
彭国论的书上有个例子很有意思,面向过程模拟了一家银行的入账出账。
但是如果你需要同时模拟多家银行,那么 OOP 就显示出它管理效率上的优势了。
这种情况下,面向过程如果用结构体表示一家银行,每个函数过程同样的传递这个结构体,其效率也就和OOP传递self/this指针差不多了。

所以,你看到面向过程和OOP两者之间的性能差距,底层来自于对self/this指针的传递和带偏移的解引用(取this指针的成员)
但逻辑上,实际是“管理一个例程”和“管理可能多个例程”之间的差异

所以,当你面对一个选择,到底是用面向过程还是OOP,首先你要问自己,我是否需要同时管理这个类型的多个历程?
如果答案是一定不会,那么OOP并不是一个好的选择。
如果答案是可能会,那么可以大部分数据管理、整理、输入输出等函数使用OOP,少部分计算密集型的过程慎重考虑。

其次,simply fortran 内核就是 gfortran(minGW),所以它的表现应该是和 gfortran 一样的。
如果你感觉到它俩有明显差异,应该是编译选项的区别了。仔细检查两者用的编译选项是否一致。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-11 01:07

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表