混合 C 和 C++ 时处理“new”关键字

问题描述 投票:0回答:1

我正在尝试将用 C++ 编译的静态库集成到 C 项目中。这基本上涉及将静态库(用 Qt 开发)与我的 C 模块中的目标文件链接起来。目标是ARM CORTEX-M7。

我在 C++ 模块中使用“new”关键字时遇到问题。我已经在链接器脚本中定义了堆部分,但由于 C++ 模块不知道这一点,因此它导致内存被分配在基地址 0x0 处,这会导致异常。我想了解如何传递编译期间我的 C++ 模块的堆起始地址,以便动态内存分配发生在正确的区域。

c++ c compilation linker embedded
1个回答
0
投票

我在 C++ 中使用“new”关键字时遇到问题 模块。

不要在嵌入式程序中使用 malloc 样式分配。我建议为此使用静态分配的内存池和对象轮询。否则小堆很快就会碎片化。

要存档它,您必须重载

new
运算符。 请记住,异常、RTTI、stl、boost 和其他花哨的 C++ 库不适合嵌入式目标。

我正在尝试将用 C++ 编译的静态库集成到 C 中 项目。这基本上涉及链接静态库(开发的 与 Qt)和我的 C 模块中的目标文件。目标是ARM 皮质-M7.

不幸的是,这几乎是不可能的。一个好的经验法则是:“您可以在 C++ 中使用 C 代码,但避免在 C 中使用 C++ 代码。”

© www.soinside.com 2019 - 2024. All rights reserved.