程序中提升几毫秒、节省几kB的内存有必要吗?
▍程序中提升几毫秒、节省几kB的内存有必要吗?
看场合,桌面,web啥应用一般不考虑,做嵌入式开发的一般要考虑,芯片sdk的话那就是成本,几K大小也要抠[呲牙]
▍程序中提升几毫秒、节省几kB的内存有必要吗?
程序中提升几毫秒、节省几kB的内存有必要吗?
经常有朋友在问这个事情,现在电脑的CPU、内存、显卡都非常强大了,编程还需要那么精雕细琢,去节省那一丁点的内存、提升一点点的速度,这有什么意义?
是否有意义,要看在什么场合下使用的程序以及哪一种用途的程序,多数情况下,这样精雕细琢还是很有意义的。
以下用实例说明:
例1、12306订票系统。
外观看起来不过是一个网页,但实际上它后台的支撑是非常复杂的。
这个系统,一年售出车票有30多亿张;网上售票比例超过了80%;互联网高峰日,售出车票达到了1282多万张;高峰时每秒售票超出1000张;网站高峰日访问量超过了1600亿次!
不用说,这种系统,每个用户的计算加快一毫秒,每个步骤节省几个字节内存,那么对于整个系统来讲都是天文数字的节省。
例2、视频播放软件。
众所周知,视频播放软件,其核心功能就是图像声音信号的编码和解码。以4k视频为例,其水平清晰度3840,垂直清晰度2160,宽高比16:9,总约830万像素,每个像素包括红绿蓝三种颜色,每种颜色有24位深度,一秒钟要处理三十幅画面,其计算处理的工作量之大可见一斑。处理视频软件大部分工作量都是重复的,因此每一个步骤提升哪怕是一毫秒、节省一点内存,也可以使整个系统更流畅。
当然了,对于单机使用的wps之类,其速度和内存占用并不是非常敏感,编程的时候可以放宽要求。而对于多用户端、大数据流量的软件来说,为了提高性能,还是应当精打细算。
▍程序中提升几毫秒、节省几kB的内存有必要吗?
我做开发,能用原生尽量用原生,能不用框架尽量不用,就是为了提升几毫秒,节省几kb内存,如果你不服,试试在35M主频,512字节内存的单片机上写一个web服务器试试,你会发现,除了c语言和汇编语言,什么PHP、Java、C#都是浮云,更不要说框架了,调试环境ESP8266+STC89C52,通过网页控制灯的亮灭,另外,也可以使用arduino直接操作ESP8266,无须51单片机也可以实现一样的功能。
▍程序中提升几毫秒、节省几kB的内存有必要吗?
这个要视运行环境而定。
我是做自动控制软件的,掌控定时节奏,是重要的工作。大的时间节拍以ms(毫秒)为单位,小的时间节拍为几十us(微秒),要求不一样。以下分别说明。
对于上位机,几KB内存、几ms时间不是问题。
我们平常接触比较多的,是FUNUC,SIMENS以及国产华中、广数等大的数控设系统,以及众多小众的数控系统。
大公司的数控系统,在UI界面的XYUVZABC等轴的座标显示上,让人觉得很流畅,反应很快,每秒钟显示十几次一点问题没有。这主要是因为工控机的频率大幅提高了,显示RAM的刷新速度也大幅提高。
以前用486DX工控机,最大频率50MHZ;现在用intel I5,I7等工控机,双核四线程,随便就能达到2GHZ以上。内存由1MB到现在的8~16GB,以及可以扩充的的虚拟内存。
考虑到CPU频率,内存、显存大小及访问速度的大幅提升,一般的上位机程序开发,不用太在意增加几K程序大小、内存大小,不用在意几ms的时间,程序员总能找到很好的处理方法。
windows的最小可控制时间也就10ms,再小了系统工作该不正常了。这也从另一方面说明,节省几ms的程序执行时间,对于上位机没多大意义。
对下位机,时序要求严格,几K程序大小、内存大小,几ms的时间周期,作用重大。
如果用发脉冲、方向的方式,控制电机速度,30us发送一次,电机带动目标系统走1um,那么,每分钟能达到2000mm的速度。
在这样的系统,每个周期的计算及自动控制时间只有30us,我们要尽可能地精简算法,最好用线性计算,使时间最少。
如果在每30us的运算中,大量使用对数、指数、cos/sin/tan/ctg等数学函数,无法满足速度的要求。
同样,对于只有64~128KB的单片机来说,几KB的空间是很宝贵的,不然就要选更贵的单片机。
对于实时性要求更高各系统之间的数据交换,一般要求小于ms级的交换频率,超过了,无法保证自动控制的实时性要求。
总结:对于上位机,CPU双核2GHZ,内存也随便能达到4GB及更多,是最低配置,几K的程序大小不是问题。至于几ms时间,可以通过合理的时间分配来解决。
对于下位机,几K程序大小、内存大小,几ms的时间周期,是非常珍贵的,特别是时序,写程序时必须计算好,以保证系统的工作节奏。
▍程序中提升几毫秒、节省几kB的内存有必要吗?
这个要分情况而定。如果仅仅是响应用户的操作那么不优化没问题,但是有些情况下这几毫秒几kb是不能忽略的,比如这个判断语句在一个循环语句里面,循环一百万次延迟就很明显了。还有有些程序运算量非常巨大,为了充分利用CPU的算力和昂贵有限的内存必须对代码进行优化,特别是计算机问世早期算力和内存极其有限、计算机数量极少极其昂贵,那时非常有必要优化代码。此外在实时系统、嵌入式系统、高速通讯、严格按时序工作的场合(如导弹、飞机、高铁、航天)必须要考虑这几毫秒几kb。
------------------
推荐阅读: