|
发表于 2023-10-29 11:15:03
|
显示全部楼层
首先 OOP 必然有性能上的牺牲。
牺牲具体有多大,可能与编译器,优化选项,算法,算例等诸多因素有关。
对计算密集型的函数过程,采用面向过程的确可能效率会明显高很多。
但OOP有它的优势,例如代码管理上的逻辑清晰(更符合人们对真实世界事物的分类感知),更重要的是,同一个类可以同时有多个对象。
彭国论的书上有个例子很有意思,面向过程模拟了一家银行的入账出账。
但是如果你需要同时模拟多家银行,那么 OOP 就显示出它管理效率上的优势了。
这种情况下,面向过程如果用结构体表示一家银行,每个函数过程同样的传递这个结构体,其效率也就和OOP传递self/this指针差不多了。
所以,你看到面向过程和OOP两者之间的性能差距,底层来自于对self/this指针的传递和带偏移的解引用(取this指针的成员)
但逻辑上,实际是“管理一个例程”和“管理可能多个例程”之间的差异。
所以,当你面对一个选择,到底是用面向过程还是OOP,首先你要问自己,我是否需要同时管理这个类型的多个历程?
如果答案是一定不会,那么OOP并不是一个好的选择。
如果答案是可能会,那么可以大部分数据管理、整理、输入输出等函数使用OOP,少部分计算密集型的过程慎重考虑。
其次,simply fortran 内核就是 gfortran(minGW),所以它的表现应该是和 gfortran 一样的。
如果你感觉到它俩有明显差异,应该是编译选项的区别了。仔细检查两者用的编译选项是否一致。 |
|