Linux程序设计的一些优化措施
2017-08-31 19:32:36 来源:易采站长网友投稿 作者:51CTO
那些常识是正在平居的浏览中,零星的得到的,本人总结了一下,分享正在那里
齐局变量VS函数参数
齐局变量正在Linux下的驱动编程里边,用的长短常多,比方中止效劳函数ISR,根本上皆能够用齐局变量去做为数据的更新,及变乱的触收。给函数通报参数的服从普通去道,要低于间接利用齐局变量,特别是参数的数量太多的时分。参数通报,是需求先将参数push到stack中,等法式运转终了,再从stack中pull出去,历程上要比global variable庞大。可是,齐局变量过量的话,那里边便设想到办理的成绩了,到前面便很易来掌握那些变量的修正,那关于函数的模块化有倒霉的影响。
i=i+1; i++; i--;
那三个语句皆凡是援用正在for()大概是while()里边,从施行服从上去道 3》2》1
那战终极死成的汇编言语有闭,普通去道,影响没有会太夸大。
switch-case语句
switch-case语句,也是用的十分多的语句。
那里尾先的劣化本则便是:将发作几率最下的前提,放正在开始判定的地位。那样便可以有用的低落比力的次数,到达更劣的结果。大概,有一种更好的办法去替换switch-case语句的办法,便是操纵查表
好比
switch(msg_type) { case DATA: handle_data_fun(); break; case RTS: handle_rts_fun(); break; ....... }
那里便能够用函数指针战查表的方法,得到handle_fun的办法去替换。
处置函数皆正在初初化的历程中,放到*handle_fun[MAX]响应的地位上
int (*handle_fun[MAX])(struct msg_t *msg); int msg_type = msg->type; handle_fun[msg_type](msg);//便可
那种办法,正在Linux的收集和谈里边,用的十分多,普通对应的查表方法为hash表构造。
sturct 战 union的利用
sturcut 利用,必然要思索到字节对其的成绩,struct中,差别的摆设次第,sizeof是差别的以是要调解好地位,只管包管struct的size最小。
union的利用,好比对差别包的数据构造上,是纷歧样的,以是只管利用union去辨别差别的包构造那样对法式的可读性比力好。
volatile的利用
那正在驱动编程圆里长短常有效的一个标记。目标是没有让编译器compiler把当前的变量劣化失落。特别是触及到硬件存放器的值的时分。
乘除运算的简化
乘除运算,对arm去道太致命,arm的乘除皆死成一堆的汇编指令才气完成。以是普通能够经由过程位操纵,好比移位,与低位去停止恰当的化简。好比 a*8 = a<<3;
Inline 函数
正在真现比力简朴功用的函数,和那些挪用十分伟大的函数,皆能够正在函数前参加inline的标识。那样正在发生汇编的时分,可以更有用。也能够替换较庞大的define语句。













闽公网安备 35020302000061号