2017-05-22 103 views
1

我正在使用资源有限的嵌入式平台进行编程。 (我有512Kb的闪存和80Kb的SRAM)。我用std::vector来获得对象的矢量,它工作正常。通过使用我使用的闪存增长了14Kb(而RAM使用增长0.2Kb)std :: vector:值得吗?

现在,我要在平台上实现其他一些使用某些intdouble的数组的平台。

我不知道在编译时这些数组中的一些元素的数量。我到目前为止所做的通常实现就是“估计”一些最大限制,然后简单地使用该长度的数组。

现在,vector可以动态改变它的大小,这很好。

但值得吗?或者我应该为数组分配一些固定的最大大小?我不认为我想用另一个14Kb来做这件事。

有何评论或建议?

编辑: 我想我实际上要求的是: 什么是使用一个向量的内存将使用的内存量,说10个元素?它会像int myarray [10]一样吗?多少还是多少? 我刚刚从someprogrammerdude读取了一条评论,它解释了使用闪存的增加是由于代码的增加,这是有道理的,因为我包括一个库!

+0

为了确定我已经很好理解了:你使用''std :: vector''的''push_back'' /''emplace_back''成员函数? – nefas

+1

不知道除了你以外,谁能回答这个问题。你已经说过你不想花费14Kb的矢量,所以它有点不清楚什么是问题 – user463035818

+3

因为矢量是模板,通过使用两个不同类型的矢量,你可以增加生成的代码量。需要注意的是,这只是增加的代码量,运行时*内存*开销应该低得多,并且添加第二个向量可能不会使生成的代码量增加一倍。最后,这是一个折衷:你想要一个“动态数组”的优点,并使用更多的代码,或者你想要一个静态数组,使用较少的代码(和FLASH),但可能浪费RAM而不是? –

回答

0

如果您必须在运行时动态分配内存,这可能会减慢处理速度,并且如果您处于硬实时环境中,则会遇到问题。如果您担心这个问题,请使用固定大小或提前预留足够的内存(std::vector::reserve()函数)。

5

通过打开编译器优化,您可以大大减少编译器生成的代码的数量。我建议你尝试使用最新的clang编译器来管理你的代码,它非常善于降低代码大小。