范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

为什么不建议函数有太多参数?

  记录一篇今天工作的思考。为什么不建议函数的有太多参数?
  今天做组内代码评审时,发现同事的代码有一个小问题,一个函数添加了一个参数后有了7个参数,而公司的编码规范要求,函数的参数不许超过6个。
  后来我就研究了一下,为啥不建议函数有太多参数呢?当然函数参数太多,不利于维护,学习成本比较高。除此之外,函数参数太多对性能也有一定的影响。 观察参数传递方式
  我做了一个实验,观察对含有6个、7个、8个参数的函数进行调用时,到底有哪些不同,测试代码如下: #include   void func6(int p1, int p2, int p3, int p4, int p5,            int p6) { }  void func7(int p1, int p2, int p3, int p4, int p5,            int p6, int p7) { }  void func8(int p1, int p2, int p3, int p4, int p5,            int p6, int p7, int p8) { }  int main() {     func6(1, 2, 3, 4, 5, 6);     func7(1, 2, 3, 4, 5, 6, 7);     func8(1, 2, 3, 4, 5, 6, 7, 8);     return 0; }
  我们查看汇编代码,来观察调用时如何传递参数。
  我们看一下func6的调用,全部通过寄存器传递。    0x00005555555551ce <+8>:     mov    r9d,0x6    0x00005555555551d4 <+14>:    mov    r8d,0x5    0x00005555555551da <+20>:    mov    ecx,0x4    0x00005555555551df <+25>:    mov    edx,0x3    0x00005555555551e4 <+30>:    mov    esi,0x2    0x00005555555551e9 <+35>:    mov    edi,0x1    0x00005555555551ee <+40>:    call   0x555555555169 
  我们看一下func7的调用,参数1~6通过寄存器,参数7通过堆栈传递。    0x00005555555551f3 <+45>:    push   0x7    0x00005555555551f5 <+47>:    mov    r9d,0x6    0x00005555555551fb <+53>:    mov    r8d,0x5    0x0000555555555201 <+59>:    mov    ecx,0x4    0x0000555555555206 <+64>:    mov    edx,0x3    0x000055555555520b <+69>:    mov    esi,0x2    0x0000555555555210 <+74>:    mov    edi,0x1    0x0000555555555215 <+79>:    call   0x555555555188 
  我们看一下func8的调用,参数16通过寄存器,参数78通过堆栈传递。    0x000055555555521e <+88>:    push   0x8    0x0000555555555220 <+90>:    push   0x7    0x0000555555555222 <+92>:    mov    r9d,0x6    0x0000555555555228 <+98>:    mov    r8d,0x5    0x000055555555522e <+104>:   mov    ecx,0x4    0x0000555555555233 <+109>:   mov    edx,0x3    0x0000555555555238 <+114>:   mov    esi,0x2    0x000055555555523d <+119>:   mov    edi,0x1    0x0000555555555242 <+124>:   call   0x5555555551a7 结论
  gcc编译器(gcc9),在x64环境下。函数调用时,前6个参数通过寄存器传递,超过6个后面的参数通过堆栈传递。而寄存器传递参数比堆栈传递效率高,所以建议函数参数不要超过6个。
  学习c++还是要学习一些汇编的,可以解决很多问题啊。
  最后,东北码农,全网同名,求关注、点赞、转发,谢谢~

2020年的手机,为了5G和高刷屏幕到底牺牲了多少?如题,在2020年的结尾我们回首看这一年大部分新手机,几乎都是5G和高刷手机,但是大家似乎也看到了手机重量在不断加重,手感似乎也是离越来越远!从19年的一加7pro开启了高刷屏幕的要颜值有颜值要性能有性能的韩系车为什么就卖不动?不知道朋友们是否有过注意,韩系车的颜值很高性能也算不错,可最近几年来韩系车的销量一直不温不火,还呈现一种不断下降的趋势,同样属于五大车系之一与日系车特点有不少接近之处的韩系车销量为拿捏住职场人的用车需求,小鹏P5靠的就两个字贴心作为一个对精致生活有着更高要求的都市白领,我在买房子的时候放弃了靠近市中心小且贵的公寓,而是在稍远一些的地方选了一套两室的住宅,在我看来,要想保证生活质量,更大更舒适的生活空间是必318川藏线复杂路况如何应对?哈弗H92022款实地详解一生一定要走一次川藏线!从成都至拉萨的长达2142千米的川藏线,以风景秀丽路途艰险闻名,这条梦想之路,每年都吸引着大量旅行爱好者前往不仅如此,这段路还被越野迷冠以天然试车场的称号,丰田的自吸发动机功底深厚,却为何给卡罗拉配备1。2T的发动机?众所周知日系车企在自然吸气发动机领域的功底要更加深厚,比如丰田本田日产等等,这些车企对自然吸气发动机的理解也要更加深刻,道理很简单因为日系车企从未放弃对自然吸气发动机的研发,而欧系哈弗大狗又要玩花活?一周年生日狂欢派对狂吸眼球年轻人有多难讨好?有的车企在外观上大玩花样,年轻人花里胡哨,有的车企在智能上下足功夫,年轻人啥用没有,而有的聪明的车企则从本源上下功夫,以潮流狂野的个性贴合年轻人追求时尚的属性,果自动变速器中的CVTDCVTWCVT都有哪些差异?相信广大车友对CVT变速器都很了解,一根钢带(链)来连接两个锥形普利盘,依靠摩擦来实现动力的传输不过随着自动变速器的不断发展,CVT变速器这个大类别也逐渐地产生了一些衍生品,比如S马自达为何研发压燃汽油机,压燃真的比点燃好么?汽油机用点燃的方式让混合气燃烧而柴油机则是利用压燃,长久以来人们也似乎接受了汽油机点燃柴油机压燃的方式,只不过马自达则打破了常规二代创驰蓝天拥有了压燃的能力(也配了火花塞在一些条件什么是机油增多机油乳化,对发动机会造成哪些伤害?最近这些年来一些车型上机油增加机油乳化问题频出而什么是机油增加机油乳化问题呢?实际上就是汽油或水(冷却液)流入曲轴箱内与机油混合到一处,使得机油液面增加这就是机油增加而混入到机油内咖啡智能平台赋能,WEY玛奇朵开启倒车不用方向盘时代眼下,时间一晃儿都入秋了,年末也就是一转眼的事情,这紧迫的时间不由得让我回忆年初做下的计划清单里,高高写在第一行的那一条入手一台专属座驾。为了赶在年末之前把这件事搞定,我急忙联系了什么是发动机后置,后置后驱为何成为不了主流的驱动形式?与其问汽车为什么不造后置后驱,不如问汽车为什么要造后置后驱尤其是家庭用车发动机后置有什么意义,后置发动机是保时捷的图腾,但凡是可称之为图腾的事物,其实际价值都远不如精神层面的价值保
宝骏KiWiEV开启预售预售价6。98万起日前,宝骏官方宣布宝骏KiWiEV正式开启预售,该车提供设计师和艺术家两个版本,预售价格分别为6。98万元和7。88万元。据了解,购买新车消费者可以享受24期0利息三年免费道路救援红旗H9申报图曝光尺寸全面超越奔驰S级日前,从工信部最新一期的申报目录了解到,一汽红旗新款红旗H9的申报图曝光,根据申报信息了解到,新款红旗H9车长为5337mm,新车有望在年内推出。外观上来看,新车整体设计与现款H9网传涉及A4L等车型奥迪因芯片短缺导致停产系假新闻刚刚,网传一张涉及A4L等车型奥迪因芯片短缺导致停产的新闻消息,针对此事,我们向奥迪内部人士进行了确认,经过确认后了解到,该网传消息为假新闻,请大家勿听信谣传,一切以官方发布的通告中消会2021中国车内气味研究报告阶段性研究成果发布7月30日,中国消费品质量安全促进会(以下简称中消会)以线下和线上直播的形式发布了2021中国车内气味研究报告阶段性研究成果。从此次车内气味研究报告中了解到,截止2021年6月底,全新宝马M2假想图曝光搭载3。0T发动机日前,从海外了解到,全新宝马M2的假想图曝光,新车将采用后驱设计,全新宝马M2有望继续搭载3。0T六缸发动机,最大功率将超过368kW(500马力),传动方面匹配双离合变速箱。外观全新奇骏今晚上市新车预售19。99万起,现场图抢先实拍7月30日晚,全新一代东风日产奇骏正式上市。目前,新车预售价格分别为19。99万元和21。99万元,上市车型全系搭载1。5T三缸发动机,分为两轮驱动版和四轮驱动版。在外观造型设计上东风风行菱智PLUS旅行版将于8月11日正式上市日前,从东风风行官方获悉,旗下中大型MPV菱智PLUS旅行版将于8月11日正式上市,此外,菱智PLUSCNG版车型将于9月上市。新车在外观设计上延续了现款车型的造型风格,细节上有所全新奇骏正式上市新车售价区间18。19万26。29万元7月30日晚,全新一代东风日产奇骏正式上市。此次上市新车推出2个版本车型,分别为VCTurbo超变擎3002WD与VCTurbo超变擎3004WD,共8款车型,新车售价区间为18。宝马iNext预量产车路试谍照曝光新车明年将上市日前,从海外了解到一组BMWVisioniNext概念车的路试谍照,新车在车型定位上将定位于旗舰中大型SUV车型。新车在外观设计上沿用了宝马现款车型比较有科技感的造型风格,宽大的进长城汽车发布7月产销快报WEY品牌销量同比下滑43。51日前,长城汽车发布了7月份各个品牌的产销数据快报,数据显示,长城汽车哈弗品牌一直持续销量稳定,哈弗H6产品车型,月销量也一直处于国内紧凑级SUV市场销量排行榜首位,这对哈弗品牌来讲成都车展长城坦克500新车现场实拍最后有惊喜在成都车展上,长城汽车坦克品牌带来了坦克500这款新车,此前新车命名为坦克600,更名之后现场关注的人数依旧不少,直接来看现场的实拍效果吧,其中为了了解这款车,媒体老师们真的是煞费