对于6,局部变量的栈内存和全局变量占用的.bss内存要分配的空间大小在编译期就已经确定了,是由程序已有指令自动分配的。 动态分配的话,主要是分配得到堆内存和mmap内存,动态分配栈内存可以通过 alloc() 函数。 堆内存的话,由堆管理器作为内存中间管理者。 堆管理器向操作系统申请内存主要通过 brk 和 mmap 两种系统调用,申请到的内存以 arena 的形式管理。其中,主线程申请的较小的内存使用 brk 系统调用直接在代码段的上方扩展空间得到,过大的内存申请则由 mmap 系统调用申请一个 mmap 段得到;而其它线程的堆空间只是由 mmap 系统调用提供。 而用户向堆内存管理器提出动态内存分配申请,则是通过坤坤你答过的一系列标准库函数 malloc()、realloc() 等,从已有的 arena 中获取由堆管理器以 chunk 形式管理起来的内存。 mmap 内存的话那就直接用封装了 mmap 系统调用的库函数 mmap() 喽。
点赞 2

相关推荐

牛客网
牛客网在线编程
牛客网题解
牛客企业服务