我对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,则一切正常,并且我没有获得大堆分配。
我想知道这是正常的还是一个错误,如果正常可以有人解释大堆分配发生了什么?
注意我使用GNU Tools for ARM版本5.2 2015sq4,但我不确定如何检查newlib版本。