Tag: 存储器管理

当嵌入式编译器没有运算符new或STL支持时,如何进行C ++?

我正在为我的大学开展一个小组高级项目,并且在尝试让我的代码工作时遇到了一个主要障碍。 我们的8位Atmel微控制器的编译器不支持new或delete运算符,它不支持C ++ STL。 我可以用C编程,但是我必须实现一个我从未做过的A *算法。 虽然我最初尝试过C,但我很快意识到我之前从未做过纯C。 尝试使用结构和函数对对象进行建模正在减慢我的速度,因为我已经习惯了更清晰的C ++语法。 无论如何,我的编译器缺点的确切措辞可以在这里找到: http : //www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus 为了克服它们并仍然使用C ++,我考虑了以下可能性。 1)不要分配任何东西,只需使用模板在堆栈上生成固定数组。 2)在为对象分配空间后,分配并找到一些hack来调用对象的构造函数。 由于new不是运营商,因此不能选择新的展示位置。 3)只需使用C并将其吸收,它是一个微控制器为什么我喜欢它? 4)找到一个更好的编译器,可能会花费$$$。 第二个选项是最难的,但就我如何编写此代码而言,它将获得最大的回报。 但是,我想如果我弄错了调试它可能是一个巨大的痛苦。 我正在考虑在堆栈上创建对象,将它们的位复制到分配的空间中,然后将对象中的位清零,这样它就不会调用它的析构函数。 为此,我将使用unsigned char指针和sizeof运算符直接访问这些位以获取字节数。 这听起来很糟糕,我不知道它是否可以正常工作,但我正在考虑它。 我知道vtable可能有问题,但我不打算使用任何vtable,因为它只是一个8位微控制器。