Linux 堆大小和位置
我正在编写自己的内存分配器。如果我的想法是正确的,那么内核的addres空间从0到1-GB,用户空间从1到4,包含不同的部分,如:代码、堆栈、数据、堆和其他Linux 堆大小和位置,linux,memory-management,Linux,Memory Management,我正在编写自己的内存分配器。如果我的想法是正确的,那么内核的addres空间从0到1-GB,用户空间从1到4,包含不同的部分,如:代码、堆栈、数据、堆和其他 在程序执行期间,堆段的大小和位置不能更改,对吗 我怎样才能知道尺寸和位置 在获得堆区域后,我需要做的就是自行分配内存,不是吗 你为什么担心这个 如果您正在编写分配器a-la libc,请使用sbrk和/或mmap从内核中保留内存。您不必担心这些系统调用都不在堆的位置 如果您想检测libc的malloc/calloc/realloc,事情就更
你为什么担心这个 如果您正在编写分配器a-la libc,请使用
sbrk
和/或mmap
从内核中保留内存。您不必担心这些系统调用都不在堆的位置
如果您想检测libc的malloc
/calloc
/realloc
,事情就更简单了——只需将它们包装在分配器函数中即可
brk
的情况一样,它的位置位于数据段末尾之后,并且随着地址的增加而增加(或者使用mmap以页面大小的倍数分配,等等)你为什么担心这个 如果您正在编写分配器a-la libc,请使用
sbrk
和/或mmap
从内核中保留内存。您不必担心这些系统调用都不在堆的位置
如果您想检测libc的malloc
/calloc
/realloc
,事情就更简单了——只需将它们包装在分配器函数中即可
brk
的情况一样,它的位置位于数据段末尾之后,并且随着地址的增加而增加(或者使用mmap以页面大小的倍数分配,等等)您在什么级别分配内存?如果您正在编写自己版本的
malloc()
作为练习,那么您可能需要调用“real”malloc()
,以便在程序启动时分配大量内存。这将是一个“堆”,您将通过分配一部分来管理它,并跟踪已使用或仍然可用的区域。您将在哪个级别分配内存?如果您正在编写自己版本的malloc()
作为练习,那么您可能需要调用“real”malloc()
,以便在程序启动时分配大量内存。这将是一个“堆”,您将通过分配它的一部分并跟踪已使用或仍然可用的区域来管理它。