我正在使用基于newlib C库的Linaro提供的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库是否有更多用于指定最大堆大小的符号。
发布于 2018-08-08 14:32:01
正如在newlib邮件列表中所解释的,有两种场景:
SYS_HEAPINFO的返回值指定。_sbrk()系统调用检查分配的内存是否覆盖当前堆栈。但是,在成长时没有检查堆栈是否覆盖堆。因此,没有新的and符号来指定堆大小,从而在堆栈和堆内存区域之间强制进行强分区。https://stackoverflow.com/questions/51743715
复制相似问题