在任何地方都找不到解决方案。希望在这个问题上变得更加开明。
我想为 arduino 项目使用各种动态数组。我在这里遇到了一个在 arduino 平台上使用向量的库。我使用了一个函数来监视我在这里找到的 arduino 上的可用 RAM 。
这是我的代码示例:
Serial.print("Starting RAM: ");
Serial.println(freeRam());
Serial.println();
vector<int> intVector;
Serial.print("Remaining RAM after intVector declaration: ");
Serial.println(freeRam());
Serial.println();
vector<char> charVector;
Serial.print("Remaining RAM after charVector declaration: ");
Serial.println(freeRam());
Serial.println();
Serial.print("sizeof(intVector) = ");
Serial.println(sizeof(intVector));
Serial.print("sizeof(charVector) = ");
Serial.println(sizeof(charVector));
这是输出:
Starting RAM: 1684
Remaining RAM after intVector declaration: 1618
Remaining RAM after charVector declaration: 1584
sizeof(intVector) = 7
sizeof(charVector) = 7
似乎 intVector 分配占用了 RAM 的 66 字节块。看起来向量为此分配了 32*2 + 2 = 66 字节的内存。同样,charVector 分配占用了 34 个字节 (32*1 + 2)。似乎这种分配 32* sizeof(type)
+ 更改的模式存在于其他数据类型(例如 char、float 等)。请注意,sizeof(int) = 2
在arduino上。
我的问题是我想填充这些向量的对象大小在 10-20 字节之间。由于 ATMega328 上只有 2 kB 的 RAM,我将无法按照目前的设计运行我的程序。对于具有 的对象segment
,sizeof(segment) = 16
向量会占用 522 字节的 RAM 块。
所以我的问题是:
当向量的大小只有 7 个字节时,尽管它的类型,为什么向量分配 32 * sizeof(type) 字节的 RAM?
有没有更好的方法在 arduino 平台上使用某种动态数组?
是否有内存管理技术可以让我使用向量?
谢谢,如果这个问题是重复的,请提前道歉!
编辑:
似乎该向量被初始化为容量为 32。
intVector.capacity() = 32;
尝试使用
intVector.reserve(1); // or
intVector.resize(1);
不会改变向量的容量。