内存篇之程序内存消耗评价指标

AI助手已提取文章相关产品:

    嵌入式软件除CPU占用率或者说运行速度外,内存方面还有三大量化评价标准,即ROM size, Peak memory occupation和 max stack depth,虽然不属于什么官方标准,但这三点的确综合反映了程序内存占用方面的整体指标。

    rom size既不是指exe文件大小,也不是lib文件大小,而是目标文件中有效二进制段大小。exe和lib文件中都有一些辅助段,如文件头/加载信息/符号表等,这些段在最终进驻系统RAM的过程中一般会被剔除。因此统计模块的ROM size大小要用二进制工具(如gcc中的ar或objdump等toolchain)分析,累加“代码段”+“数据段”等有效的内存占用段,得到最终结果。

ROM size与编译器及其编译选项有一定相关性,同样的代码由不同的编译器编译,最终获得的纯粹二进制代码大小会有一定差别。如C优化篇提到空间换时间的循环展开就是增大ROM size换取速度的提高。

    peak memory occupation是指模块内不断malloc 与free的过程中,动态堆内存消耗的最高点,这个指标代表了模块对内存的需求。注意这是一个动态过程,并不是将代码中所有malloc的内存大小相加的值,可对照理解内存泄漏中的隐式泄漏。

 

    max stack depth是指整个模块运行过程中所进入的最大栈深度。软件运行中不停进出函数,同时也会不停压栈和出栈,在这个动态过程中触及的最大栈内存的深度代表了模块对系统栈段最小容量的要求。在程序由PC移植到嵌入式系统时要特别注意这个指标,往往要消除一些函数内部局部大数组来降低栈深度,满足嵌入式平台的要求。可参见栈溢出。

这几个评价标准在不同应用中各自有不同侧重点,要根据硬件平台特性综合考量。

您可能感兴趣的与本文相关内容

### 曲线拟合误差评价指标 #### Sum of Squares due to Error (SSE) Sum of Squares due to Error (SSE) 是衡量模型预测值与实际观测值之间差异的一种常用方法。具体来说,它是残差平方和,即每个数据点的实际值减去预测值得到的偏差的平方之和。较小的 SSE 表明模型能够较好地拟合给定的数据集。 对于一组含有 \( n \) 个观察值的数据而言,如果 \( y_i \) 表示第 i 个观测的真实响应变量而 \( \hat{y}_i \) 则代表对应的由回归方程计算出来的估计量,则 SSE 可表示为: \[ SSE = \sum_{i=1}^{n}(y_i-\hat{y}_i)^2 \] 此度量有助于识别那些可能不适合所研究现象的最佳拟合直线或曲线[^1]。 #### 决定系数 (R-squared, R²) 决定系数也称为可决系数或者判定系数,用来描述自变量对因变量变异性的解释比例。它反映了通过引入独立变量来改进简单平均数作为最佳预测器的程度;取值范围是从0至1之间的实数。接近于1意味着大部分变异性已被考虑进去,因此该模型具有较高的解释力;反之则说明还有许多未被捕捉的信息存在于剩余项之中。 \[ R^2 = 1 - \frac{\text {SSE}} {\text {Total sum of squares}} \] 这里,“总平方和”指的是所有个体测量与其均值间差距的累积效应。值得注意的是,在某些情况下增加额外参数可能会提高 R² 的数值但却未必能真正改善整体性能——这就是所谓的过拟合问题。 #### 实际应用中的考量因素 当面对大规模数据集时,正规方程求解方式由于其复杂度较高且内存消耗大而不总是最优方案。此时可以采用诸如梯度下降之类的迭代算法来进行优化过程。这类技术允许逐步调整权重直至达到全局最小化目标函数为止,从而有效地降低了运算成本并提高了效率[^2]。 另外,在不同编程环境中实现上述评估标准也会有所区别。例如 Java 中可以通过调用特定库完成此类任务的同时还需注意程序设计原则如良好的编码习惯、合理的资源管理等以确保最终解决方案既高效又可靠[^3]。 ```matlab % 计算 SSE 和 R-Square 的 MATLAB 示例代码 function [sse, rSquare] = evaluateFit(xData, yData, fittedModel) % 预测值 predictedY = feval(fittedModel,xData); % 求 SSE sse = sum((yData - predictedY).^2); % 总体平方和 SSTotal meanY = mean(yData); ssTotal = sum((yData-meanY).^2); % 计算 R-square rSquare = 1-(sse/ssTotal); end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值