【C++】【内存】系列三:内存优化

【C++】【内存】系列三:内存优化,第1张

【C++】【内存】系列三:内存优化

程序性能有两个考核指标,一是时间,二是空间,本文是针对空间上进行优化,尽可能减少程序的运行内存(可能会增加运行时间)。

栈内存优化

由于栈是 *** 作系统进行管理的,因此不需要主动去释放内存,不要申请过大的栈内存,防止栈溢出。

a,函数不能太大(建议不超过40~50行),否则会导致线程占据的栈内存过多。
b,内存值较大的函数参数尽可能使用引用或者指针。
c,函数体内定义变量和使用变量地方尽可能紧凑, *** 作系统器会早点回收栈内存,减少栈内存的使用量。

堆内存优化 内存计算

一般是调用 *** 作系统提供的内存消耗接口,周期性输出内存消耗数据,并且制作成曲线图,便可以清晰看出内存消耗情况。注意此时不要运行其他程序,以免造成干扰。

内存优化

编译器优化
a,嵌入式的话,可以指定CPU型号,进行特定的编译。
b,开启-O优化选项。


算法和数据结构优化
a,如果是确定的数据长度,主要做查询工作,建议使用数组来完成。
b,如果是插入删除次数为主,需要使用链表或者哈希表。
c,使用高效的排序和查找算法。
d,结构体里面数据成员按照CPU位长对齐。

函数优化
a,小函数使用内联函数
b,减少函数的入参个数,尽可能使用引用传递或者移动语义

底层库或者API优化
a,使用内存消耗较小的库或者API。 Mebdtls
b,减少库文件的引入,比如求绝对值可以自己定义宏函数。
c,删除printf多策略函数,使用puts更好


a,设计类的时候,继承层数不要过多
b,定义移动构造函数和移动赋值运算符,避免不必要的复制 *** 作

运算
a,除以2或者2的幂的除法运算改用右移;
b,使用复合赋值运算符代替普通运算符,比如 a += b; a = a + b;
c,浮点运算转换成整数运算,尽量少用浮点运算
d,简化表达式:y = a*x*x*x + b*x*x + c*x + d; => y = (((a*x + b)*x) + c)*x + d;
e,Switch代替if-else

For循环
a,不变的代码(strlen)移出循环体外
b,展开循环,读的话按照1:8,写的话按照1:16,当然根据具体的处理器来进行调试。
c,for中慎用涉及构造析构的语句,建议放在for之外。比如string、vector
d,避免在循环中动态地创建变量
e,避免在循环中调用隐藏的函数
(1)• 声明一个类实例(调用构造函数)
(2)• 初始化一个类实例(调用构造函数)
(3)• 赋值给一个类实例(调用赋值运算符)
(4)• 涉及类实例的计算表达式(调用运算符成员函数)
(5)• 退出作用域(调用在作用域中声明的类实例的析构函数)
(6)• 函数参数(每个参数表达式都会被复制构造到它的形参中)
(7)• 函数返回一个类的实例 (调用复制构造函数,可能是两次)
f,for中建议使用移动赋值而不是拷贝赋值运算符

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5670304.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存