Linux 动态内存分配与管理全解析
1. 映射文件与内存管理接口概述
大多数地址空间包含一些映射文件,像程序可执行文件本身、C 及其他共享库,还有数据文件等。可以查看 /proc/self/maps 或者 pmap 程序的输出,来了解进程中的映射文件情况。Linux 提供了一系列接口,用于获取和释放内存、创建和销毁新的映射等操作。
2. 动态内存分配
动态内存是任何内存管理系统的基础,它在运行时分配,而非编译时,并且其大小在分配时才确定。当开发者不确定程序运行时所需内存的数量和时长时,就需要使用动态内存。例如,存储文件内容或键盘输入,由于文件大小未知,用户输入的字符数量也不确定,所以缓冲区大小会动态变化,可能需要随着数据的读取不断增大。
在 C 语言中,没有直接由动态内存支持的变量。例如,C 语言没有提供直接获取存在于动态内存中的 struct pirate_ship 的机制,而是提供了分配足够内存来容纳该结构体的方法,程序员通过指针来操作这些内存。
经典的 C 语言获取动态内存的接口是 malloc() :
#include <stdlib.h>
void * malloc (size_t size);
成功调用 malloc() 会分配 size 字节的内存,并返回指向新分配区域起始位置的指针。分配的内存内容是未定义的,不会自动清零。
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



