浅谈malloc

本文介绍了C语言中的动态内存分配函数malloc、calloc和realloc,详细阐述了它们的工作原理和用途。同时,文章探讨了虚拟存储器的概念,包括其在32位Linux系统中的地址空间分配,以及malloc如何通过brk和mmap获取内存,重点解析了glibc的malloc实现方式和内存管理策略。
摘要由CSDN通过智能技术生成

动态存储器分配

大多是 C 程序在运行时会需要额外的存储,并且不能事先知道需要的存储大小,这时候使用一种动态存储分配器(dynamic memory allocator)。C 标准库提供了一个称为 malloc 的程序进行显式存储器分配,使用 free 函数来释放已分配内存,另外还有 calloc 和 realloc 两个函数。

void * malloc (size_t size);
void * calloc (size_t num, size_t size);
void * realloc(void * ptr, size_t size);
void free (void * ptr);

malloc 返回指向 size 个字节的存储块的指针;calloc 返回指向 num * size 个存储器块的指针,即分配 num 个 size 大小的连续存储块,并且存储器初始化为 0. 注意: malloc 并不保证得到存储块初始化为 0;realloc 用在当 malloc 分配的存储块大小不够时,分配更大的块,并将数据复制到新的块。以上三个函数在没有多余的存储可以分配时则都返回 NULL 指针。free 函数则释放 ptr 指针指向的存储器块。
虚拟存储器

虚拟存储器是现代计算机系统中对内存的一个抽象概念,它是由硬件和软件协同工作,提供给每个进程一个大的、一致的、私有的地址空间。简单的说,对一个 n 位的计算机系统,虚拟存储器被组织成存放在磁盘上的,2 ** n 个连续字节大小的数组的连续的地址空间,使用内存作为高速缓存。它为每个进程提供了一个一致的地址空间,从而简化了存储器的管理,并且它保护了每个进程的地址空间不被其他进程破坏(注意这里存储器与内存概念上的区别)。
比如对于 32 位的 Linux 系统,虚拟存储器空间为 2 ^ 32 即 4G, 即进程的寻址空间位 4G, 其中前 3G 划分给用户使用,后 1G 留给操作系统使用。操作系统将用户 3G 的空间划分成了数个 存储器区域,一个区域就是已经分配过的虚拟存储器上连续的一段空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值