Newlib:如何在链接器脚本中指定堆大小



我正在使用Linaro提供的基于newlib C库的aarch64裸工具链,我需要在链接器脚本中指定堆位置,以便能够使用具有动态内存C++STL数据结构(例如 std::vector (。

按照此处的示例,我定义了end符号,如下所示。

.data   : {
  *(.data)
}
. = ALIGN(8);
/* "end" is used by newlib's syscalls! */
PROVIDE(end = .);
. = ALIGN(16);
stack_bottom = .;
. = ALIGN(4096);
. = . + 0x10000;
stack_top = .;

但是,通过这种方式,无法检查堆是否已达到最大值(之后我们得到堆栈损坏(。

因此,我想知道裸机newlib库是否有一些用于指定最大堆大小的进一步符号。

正如 newlib 邮件列表中所解释的,有两种情况:

  • 半托管:堆和堆栈限制可以通过SYS_HEAPINFO的返回值来指定。
  • 非半托管:_sbrk()系统调用检查分配的内存是否会覆盖当前堆栈。但是,不会检查堆栈在增长时是否覆盖堆。因此,没有用于指定堆大小的 newlib 符号,从而在堆栈和堆内存区域之间强加了强分区。

相关内容

  • 没有找到相关文章

最新更新