加入收藏 | 设为首页 | 会员中心 | 我要投稿 玉林站长网 (https://www.0775zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

一起揭秘代码效率真相

发布时间:2021-04-07 14:55:42 所属栏目:外闻 来源:互联网
导读:今流行面向对象编程,个人也认为这是一种使代码更加清晰和模块化的方法。面向对象编程风格优缺点明显,优点是: 如果变量是同一结构体或类的成员,则一起使用的变量也存储在一块,这样数据缓存更有效。 类成员变量不需要作为参数传递给类成员函数,省去了参

今流行面向对象编程,个人也认为这是一种使代码更加清晰和模块化的方法。面向对象编程风格优缺点明显,优点是:

  1. 如果变量是同一结构体或类的成员,则一起使用的变量也存储在一块,这样数据缓存更有效。
  2. 类成员变量不需要作为参数传递给类成员函数,省去了参数传递的开销。

缺点是:

  1. 一些程序员把代码分成太多的小类,没太大必要且效率低。
  2. 非静态成员函数有一个this指针,它会作为隐式参数传递给函数,这会产生一部分开销,特别是在32位系统中,寄存器是稀缺资源,this指针会占用一个寄存器。
  3. 虚函数效率较低

类和成员函数的开销其实并没有特别大,如果面向对象风格可以使程序结构更加清晰,我们只要避免在程序最关键的部分使用太多的函数调用,就不要担心它的开销。

类的数据成员

当创建类或结构体的实例时,其数据成员按其声明的顺序连续存储。大多数编译器都会对结构体进行内存对齐,这种对齐可能会在成员大小混合的结构体或类中,造成未使用字节的空洞。重新排序使结构变小了8个字节,整个数组变小了800个字节。

通过重新排序数据成员,结构对象和类对象通常可以变小。如果不确定一个结构或它的每个成员有多大,可以使用sizeof,它的返回值包括对象末尾的任何未使用的字节。

如果成员相对于结构体或类开头的偏移量小于128,则访问数据成员的代码会更紧凑,因为该偏移量可以表示为8位有符号的数字。如果相对于结构体或类的开头的偏移量是128字节或更大,那么偏移量必须表示为一个32位数字(指令集在8位到32位之间没有偏移量)。例如:偏移量是400。任何通过指针或成员函数(如ReadB)访问b的代码,都需要将偏移量编码为32位数字。如果交换了a和b,则两者都可以通过编码为8位有符号数字的偏移量来访问,或者根本没有偏移量。这使代码更紧凑,以便更有效地使用Cache。因此,建议在结构或类声明中,大数组和其他大对象排在最后,最常用的数据成员排在前面。如果不能在前128个字节内包含所有数据成员,则将最常用的成员放在前128个字节中。

类的成员函数

每次声明或创建类的新对象时,都会生成数据成员的新实例。但无论多少类的实例,成员函数只有一份。调用成员函数和使用结构指针或引用来调用简单函数一样快。

(编辑:玉林站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读