问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c语言8个实用方法代码优化

发布网友 发布时间:2022-04-21 06:02

我来回答

1个回答

热心网友 时间:2023-11-06 14:33

C语言8个实用方法代码优化

1、选择合适的算法和数据结构

选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语包莫有十分密切的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高

2、使用尽量小的数据类型

能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义的变量就不要用长整型(long int),能不使用浮点型(float)变量就不要使用浮点型变量。当然,在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值,C编译器并不报错,但程序运行结果却错了,而且这样的错误很难发现。

3、减少运算的强度

a、查表(游戏程序员必修课)

一个聪明的游戏大虾,基本上不会在自己的主循环里搞什么运算工作,绝对是先计算好了,再到循环里查表。如果表很大,不好写,就写一个init函数,在循环外临时生成表格。

b、求余运算

位操作只需一个指令周期即可完成,而大部分的C编译器的“%”运算均是调用子程序来完成,代码长、执行速度慢。通常,只要求是求2n方的余数,均可使用位操作的方法来代替。

4、结构体成员的布局

a、按数据类型的长度排序

把结构体的成员按照它们的类型长度排序,声明成员时把长的类型放在短的前面。编译器要求把长型数据类型存放在偶数地址边界。

b、把结构体填充成最长类型长度的整倍数

把结构体填充成最长类型长度的整倍数。照这样,如果结构体的第一个成员对齐了,所有整个结构体自然也就对齐了。

5、循环优化

a、充分分解小的循环

要充分利用CPU的指令缓存,就要充分分解小的循环特别是当循环体本身很小的时候,分解循环可以提高性能。注意,很多编译器并不能自动分解循环。

b、提取公共部分

对于一些不需要循环变量参加运算的任务可以把它们放到循环外面,这里的任务包括表达式、函数的调用、指针运算、数组访问等,应该将没有必要执行多次的操作全部集合在一起,放到一个init的初始化程序中进行。

6、提高CPU的并行性

a、使用并行代码

尽可能把长的有依赖的代码链分解成几个可以在流水线执行单元中并行执行的没有依赖的代码链。很多高级语言,包括C++,并不对产生的浮点表达式重新排序,因为那是一个相当复杂的过程。

b、避免没有必要的读写依赖

当数据保存到内存时存在读写依赖,即数据必须在正确写入后才能再次读取。虽然AMD Athlon等CPU有加速读写依赖延迟的硬件,允许在要保存的数据被写入内存前读取出来,但是,如果避免了读写依赖并把数据保存在内部寄存器中,速度会更快。

7、循环不变计算

对干一些不需要循环变量参加运算的计算任务可以把它们放到循环外面,现在许多编译器还是能自己干这件事,不过对干中间使用了变量的算式它们就不敢动了,所以很多情况下你还得自己干。对于那些在循环中调用的函数,凡是没必要执行多次的操作通通提出来放到一个init函数里,循环前调用。另外尽量减少喂食次数,没必要的话尽量不给它传参,需要循环变量的话让它自己建立一个静态循环变量自己累加,速度会快一点。

8、采用递归

与LISP之类的语言不同,C语言一开始就病态地喜欢用重复代码循环,许多C程序员都是除非算法要求,坚决不用递归。

事实上,C编译器们对优化递归调用一点都不反感,相反,它们还很喜欢干这件事。只有在递归函数需要传递大量参数,可能造成瓶颈的时候,才应该使用循环代码,其他时候,还是用递归好些。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
跪求各种言情小说,题材不限,越多越好,会加分哦。谢啦~ ...穿越网游古仙侠等等什么都行,种类不限,越多越好~ 求完本小说,种类不限越多越好。邮箱2583379991@qq.com 地热清洗 多少钱一次 地热清洗有什么效果 地热清洗方式有哪些 abs透明材料有哪些 茶叶怎么样去甲醛 茶叶如何除甲醛 茶叶除甲醛最有效方法 茶叶如何稀释甲醛 c语言编程为什么会出现Undefined symbol 错误 求C语言编程的符号 linux濡备綍缂栫▼ C语言编程中/,\这两个符号含义是什么? C语言编程中,%c,%d,%f都是什么意思? 涓怎么读音 C语言编程的注释符号有哪几种? 数据结构(c语言版)中 各种符号都代表了什么 C语言中:&&和||符号是什么意思? C语言编程中/,\这两个符号的含义 c语言编程用的符号有哪些?什么意思? 有机奶粉和配方奶粉的区别是什么? 那拉丝醇驼奶糖分含量高吗? 康吉祥有机羊奶粉是山羊还是绵羊奶粉 俏皮羊有机全脂羊奶粉品质怎么样啊? 俏皮羊有机全脂羊奶粉买给老人喝怎么样啊? 吉斯本长高高奶粉怎么样 俏皮羊有机全脂羊奶粉可以送老人喝吗? 有机全脂牦牛奶粉小孩能喝吗 全脂绵羊奶粉都有哪些好处? CAD两条线之间自动闭合如何操作 win10密码设置 cad怎么把所有的线闭合 买新车提车日期有什么讲究 提车选吉日 提车吉日怎么算,提车日子怎么选,提车吉日有什么? 提车什么日子最好 提车什么日子最吉利 提车选什么日子比较好? 提车怎么选日子? 提车吉日怎么算 提车黄道吉日怎么算 新车提车吉日 怎么选择提车吉日 提车的日子算命先生能看吗? 提车要不要选日子 如何选择提车的黄道吉日啊 提新车要看黄历日子吗 买车选什么日子最吉利 提车黄道吉日