newlib中malloc如何获取heap地址
作者:互联网
newlib代码:
caddr_t
_sbrk (int incr)
{
extern char end asm ("end"); /* Defined by the linker. */
static char * heap_end;
char * prev_heap_end;
if (heap_end == NULL)
heap_end = & end;
prev_heap_end = heap_end;
if (heap_end + incr > stack_ptr)
{
/* Some of the libstdc++-v3 tests rely upon detecting
out of memory errors, so do not abort here. */
#if 0
extern void abort (void);
_write (1, "_sbrk: Heap and stack collision\n", 32);
abort ();
#else
errno = ENOMEM;
return (caddr_t) -1;
#endif
}
heap_end += incr;
return (caddr_t) prev_heap_end;
}
第一次调用使用end符号获取堆的起始地址,因此只需要在链接文件中在heap起始地址定义end标号即可。
.heap 0x00200000 (NOLOAD):
{
. = ALIGN(64);
__heap_start = .;
PROVIDE(end = .);
. = . + 0xA0000;
__end__ = .;
}
如上,使用PROVIDE声明了end标号。
标签:__,malloc,end,newlib,incr,char,abort,heap 来源: https://blog.csdn.net/qq_14892521/article/details/118753374