我正在尝试在Arduino Due上做简单的3D图形。除此之外,我创建了一个PointContainer
类和一个Vector3D
类。我意识到我有一个记忆问题,因为当我创建一个大约100个点的对象时,Arduino草图不起作用。
我使用arduino.cc论坛上建议的代码来监控内存使用情况。
这是我的Arduino草图的setup()
函数中的一行代码:
PointContainer pcSphere(84);
在此行之前,空闲内存为55024字节,之后为32480字节。
这是PointContainer
和Vector3D
类的定义方式:
class Vector3D {
public:
Vector3D(int16_t x, int16_t y, int16_t z, int16_t w);
int32_t data[4] = {0, 0, 0, 128};
};
Vector3D::Vector3D(int16_t x, int16_t y, int16_t z, int16_t w){
data[0] = x<<7;
data[1] = y<<7;
data[2] = z<<7;
data[3] = w<<7;
}
class PointContainer {
public:
PointContainer(uint8_t pointCount);
Vector3D *points;
private:
uint8_t pointCount;
};
PointContainer::PointContainer(uint8_t pointCount) {
this->pointCount = pointCount;
points = new Vector3D [pointCount * sizeof(Vector3D)];
}
我知道在使用delete
后我必须使用new
释放内存。但我使用矢量数据直到程序结束,所以这不是问题。
sizeof(Vector3D)
是16,我查了一下。 PointContainer pcSphere(84)
应该只分配约。 1344字节的内存,但现在,它分配22544字节。当我直接创建数组时,如Vector3D points[84] = {Vector3D(1,1,1,1),...}
,它会分配正确数量的1344字节内存。
我认为我以错误的方式使用new
运算符。但是动态创建简单数组的正确方法是什么?
答案 0 :(得分:4)
imread
为类型为new T[n]
的{{1}}个对象分配内存(并构造它们),而不是n
个字节。因此,乘法如下:
T
错了。