1 / 2
文档名称:

C语言:malloc()函数与alloc()函数.doc

格式:doc   大小:15KB   页数:2
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C语言:malloc()函数与alloc()函数.doc

上传人:坐水行舟 2019/3/1 文件大小:15 KB

下载得到文件列表

C语言:malloc()函数与alloc()函数.doc

文档介绍

文档介绍:C语言:malloc()函数与alloc()函数 C语言跟内存分配方式(1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多 C语言跟内存申请相关的函数主要有alloca,calloc,malloc,free,realloc,sbrk等. 其中alloca是向栈申请内存,,并且没有初始化内存的内容,因此基本上malloc之后,调用函数memset来初始化这部分的内存空间. calloc则将初始化这部分的内存,; malloc/calloc/free基本上都是C函数库实现的,,那么将首先调用brk系统调用来增加可用空间,,释放的内存并不立即返回给os,:brk类似于批发,一次性的向OS申请大的内存,而malloc等函数则类似于零售,. 使用这套机制的原因:系统调用不能支持任意大小的内存分配(有的系统调用只支持固定大小以及其倍数的内存申请,这样的话,对于小内存的分配会造成浪费;系统调用申请内存代价昂贵,()和calloc()都可以用来分配动态内存空间,但两者稍有区别。 malloc()函数有一个参数,即要分配的内存空间的大小: Void*malloc(size_tsize); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小: void*calloc(size_tnumElements,size_tsizeOfElement); 如果调用成功,函数malloc()和calloc()都将返回所分配的内存空间的首地址。 malloc()函数和calloc()函数的主要区别是前者不能初始化所分配的内存空间,而后者能。如果由malloc()函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之,如果这部分内存空间曾经被分配、释放和重新分配,则其中可能遗留各种各样的数据。也就是说,使用malloc()函数的程序开始时(内存空间还没有被重新分配)能正常运行,但经过一段时间后(内存空间已被重新分配)可能会出现问题。 calloc()函数会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是为字符类型或整数类型的元素分配内存,那么这些元素将保证会被初始化为零;如果你是为指针类型的元素分配内存,那么这些元素