我对 newlib 比较陌生,所以我的问题可能听起来很愚蠢......
我有一个用 C 语言完成的 ARM CortexM4 项目,并在项目中添加了一个 C++ 库。我将链接器可执行文件从 arm-none-eabi-gcc 更改为 arm-none-eabi-g++。在这样做时,我注意到我开始在处理器上遇到硬故障。
我发现 __libc_init_array(); 从堆中分配了大约 2500 个字节,我在链接描述文件中限制为 4k。然后很快我的堆空间就用完了。我的 sbrk() 在超出堆时确实返回 -1,但是在使用浮点调用 sprintf() 期间,我注意到 dtoa() 似乎尝试从堆中分配 4096 个字节,但在我遇到困难后不久就失败了d2b() 中的错误。请注意,硬故障似乎是由于尝试读取/写入地址 -1,这可能是 dtoa() 中的错误,没有检查 malloc 返回值。
如果我将链接器改回 gcc,则一切正常,并且我不会获得大的堆分配。
我想知道这是正常还是错误,如果正常有人可以解释大堆分配发生了什么吗?
注意我正在使用适用于 ARM 版本 5.2 2015sq4 的 GNU 工具,但我不确定如何检查 newlib 版本。