int brk(void *end_data_segment);
void *sbrk(intptr_t increment);
使用增量为0调用sbrk()函数可以用于查找程序断点的当前位置。
什么是程序断点?它从哪里开始,0x00吗?
int brk(void *end_data_segment);
void *sbrk(intptr_t increment);
使用增量为0调用sbrk()函数可以用于查找程序断点的当前位置。
什么是程序断点?它从哪里开始,0x00吗?
malloc()
实现)来管理结果空间。这是通过brk()
系统调用完成的,它改变了数据段“断裂”/结束的点。brk
)几乎已经过时了(你可以几乎忘记它们并忽略旧的断点概念;专注于理解mmap(2))。请注意sbrk(2) man
页面在其NOTES部分中说:
避免使用
brk()
和sbrk()
:malloc(3)内存分配包是分配内存的便捷可移植方法。
(强调我的)
malloc
使用 sbrk
进行小分配,mmap
进行大分配。bash
和ls
(以及可能许多其他程序)不会对sbrk
进行任何调用。cat /proc/$$/maps
、cat /proc/self/maps
,甚至是cat /proc/$$/smaps
,并阅读一些内容以理解输出结果。sbrk
不是非常适合多线程。”
data
段用于初始化全局和静态变量。程序断点是堆段的结束。 - Chris Bao