首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Newlib:如何在链接器脚本中指定堆大小

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

Stack Overflow用户
提问于 2018-08-08 09:53:37
回答 1查看 2.3K关注 0票数 1

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

按照这里示例,我定义了end符号,如下所示。

代码语言:javascript
复制
.data   : {
  *(.data)
}

. = ALIGN(8);
/* "end" is used by newlib's syscalls! */
PROVIDE(end = .);

. = ALIGN(16);
stack_bottom = .;
. = ALIGN(4096);
. = . + 0x10000;
stack_top = .;

但是,这样就无法检查堆是否达到最大值(在此之后我们得到堆栈损坏)。

因此,我想知道裸金属newlib库是否有更多用于指定最大堆大小的符号。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-08 14:32:01

正如在newlib邮件列表中所解释的,有两种场景:

  • 半托管:堆和堆栈限制可以由SYS_HEAPINFO的返回值指定。
  • 非半托管:_sbrk()系统调用检查分配的内存是否覆盖当前堆栈。但是,在成长时没有检查堆栈是否覆盖堆。因此,没有新的and符号来指定堆大小,从而在堆栈和堆内存区域之间强制进行强分区。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51743715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档