设为首页 加入收藏

TOP

C语言复习之动态内存分配
2014-11-24 12:31:30 来源: 作者: 【 】 浏览:1
Tags:语言 习之 动态 内存 分配

前言
1.数组的元素存储于内存中连续的位置上。当一个数组被声明时,它所需要的内存在编译时就被分配。


2.但是我们也可以使用动态内存分配在运行时为它分配内存。


3.为什么使用动态内存分配


1>当使用数组时,必须用一个常量来指定数组的长度。但是,有时候,数组的长度常常在运行时才知道。因此,在某些情况下,我们通常采取声明一个较大的数组,它可以容纳可能出现的最多元素。


2>该方法的优点是:简单。


3>它的缺点是:


这种声明在程序中引入了人为的限制,如果程序需要使用的元素数量超过了声明的长度,它就无法处理这种情况。要避免这种情况,最简单的方法就是把数组声明的更大一些。


如果程序实际需要的元素数量比较少时,巨型数组的绝大部分内存空间都被浪费了。


如果输入的数据超过了数组的容纳范围时,程序必须以一种合理的方式作出响应。


一.malloc和free
1.c函数库提供了两个函数,malloc和free,分别用于执行动态内存分配和释放。这些函数维护一个可用内存。


2.当一个程序另外需要一些内存时,它就调用malloc函数,malloc从内存池中提取一块合适的内存。并向该程序返回一个指向这块内存的指针。这块内存此时并没有以任何方式进行初始化。如果要对其进行初始化,要么自己动手进行初始化,要么使用calloc()函数。当一块以前分配的内存不在使用时,程序调用free函数把它归还给内存池供以后使用。


3.这两个函数的原型如下,都在头文件stdlib.h中声明


1>void *malloc(size_t size);


2>void free(void *pointer)


4.malloc的参数就是需要分配的内存字节数。如果内存池中的可用内存可以满足这个需求,malloc就返回一个指向被分配的内存块起始位置的指针。


1>malloc所分配的是一块连续的内存。例如:如果请求分配100个字节的内存,那么它实际分配的内存就是100个连续的字节,并不会分开位于两块或多块不同的内存。同时,malloc实际分配的内存有可能比你请求的稍微多一点。但是这时由编译器定义的。


2>如果内存池是空的,或者它的可用内存无法满足要求时。在该情况下,malloc()函数向操作系统请求,要求得到更多地内存,并在这块内存上执行分配任务。如果操作系统无法向malloc提供更多的内存,malloc就返回一个NULL指针。因此,要对每个从malloc返回的指针都进行检查,确保它并非NULL是非常重要的。


5.free的参数必须要么是NULL,要么是一个先前从malloc,calloc或realloc返回的数值。想free传递一个NULL参数不会产生任何效果。


6.malloc并不知道请求的内存需要存储的是整型、浮点值、结构还是数组。Malloc返回一个类型为void *的指针。在标准中表示一个void *类型的指针可以转换为其他任何类型的指针。因此,在使用前,要进行强制类型转换。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言复习之位段 下一篇C语言复习之字符串常量

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·CPython是什么?PyPy (2025-12-26 06:50:09)
·Python|如何安装seab (2025-12-26 06:50:06)
·python要学习数据分 (2025-12-26 06:50:03)
·每日一道面试题-多线 (2025-12-26 06:20:17)
·java项目中哪些地方 (2025-12-26 06:20:14)