为具有有限CPU和内存资源的嵌入式系统编写C++代码时,常见的经验法则是实例化堆栈中的对象,并避免使用堆,除非确实有必要.这样做当然有许多已知的好处,但随着STL的出现和人们推荐std :: vectors作为一种有效的数据结构,它是否违反了我提到的经验法则,因为向量将使用堆?
示例:在过去,人们会声明具有已满足用量的已知大小的静态数组.如今,人们只会使用矢量.
我对这种转换并不是很满意,因为向量总是有可能无法分配所需的内存(提醒:这适用于内存有限的嵌入式系统).在堆栈中使用已知大小的数组可确保在编译期间有分配空间.
调用reserve()有点帮助,但这是在运行时完成的.
那么,这是引起关注的原因,还是我只是偏执狂?使用这些向量肯定要容易得多,但对于嵌入式环境,它可能不是一个好主意?
注意:这不是关于动态与固定数组的关系,而是关于如何在内存中分配数据的更多信息,这对我的环境来说是一个大问题.举个例子,有些人会这样做:假设数组可以在1到10个元素之间增长或缩小.有些人会在堆栈中创建一个覆盖此大小的数组,并根据当前大小终止NULL.这样就避免了碎片,并且在编译期间保证了分配.但是,切换到vector会使它更清晰,但代价是使用堆,并且如果分配失败可能不得不处理异常.这就是我所关注的.
我使用标签来指示版本(例如 v1、v2、v2.1、v3 等)。是否有一个可视化工具只能显示标签之间的关系?换句话说,它折叠了标签之间的所有提交,以提供版本的缩小视图。
我有一个带有12,000个条目的双精度数组.我需要将每个条目的值缩放一个因子(例如0.3345,或6.78.无论如何).
我做的是循环每个条目并执行乘法.当我在基于PPC的100MHz嵌入式系统上工作时,大量的乘法调用正在大大减慢它的速度.
我有办法更快地完成这项工作.类比就像初始化一块内存 - 一个人会使用非常快的memset.我想知道是否有一个等效的方法.