14、动态分配内存全解析

动态分配内存全解析

1. 动态分配内存概述

在程序开始时,空闲内存区域是长而连续的。但在程序运行期间,内存会不断地被分配和释放,最终连续的大内存区域会逐渐碎片化,变成越来越小的连续区域。这就可能导致即使总的空闲内存足够,但较大的内存分配请求仍会失败。客户端进程分配的内存以及内存管理器内部使用的内存,都在客户端进程的可寻址内存空间内。

动态分配内存适用于在运行时之前无法确定程序确切存储需求的情况。不过,它的效率低于静态分配内存,因为内存管理器需要在运行时堆中找到合适大小的内存块,并且调用者在不再需要这些内存块时必须显式释放,这都需要额外的处理。此外,动态分配内存还需要进行诸如碎片整理(合并相邻的空闲块)等内务操作,内存管理器通常会使用额外的存储空间来存储控制结构以方便这些操作。

如果不再需要的动态分配内存没有归还给内存管理器,就会发生内存泄漏。严重的内存泄漏会导致内存管理器最终无法满足新的存储请求。

一般来说,对于在编译时已知大小的对象,应使用自动或静态存储期来声明对象。而当存储大小或对象数量在运行时之前未知时,则应使用动态分配内存。例如,在运行时从文件中读取表格,尤其是在编译时不知道表格行数的情况下;或者创建链表、哈希表、二叉树等数据结构,这些容器中存储的数据元素数量在编译时未知。

2. 内存管理函数

C标准库定义了用于分配(如 malloc calloc realloc )和释放( free )动态内存的函数。OpenBSD的 reallocarray 函数虽未在C标准库

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值