分配内存malloc()和free()

1、首先回顾一下内存分配的有关事实。所有的程序都必须留出足够内存来存储他们使用的数据。一些内存分配是自动完成的。如:

float x;

char place[]="dancing oxen creek".

于是系统将留出存储float或者字符串足够的内存空间,也可明确要求确切的内存,int a[100];这一声明留出100个内存位置。每个位置可存储一个int值。c的功能远非如此。可以在程序运行时分配更多的内存。主要工具函数就是malloc(),参数:所需字节数。然后malloc()找到可用内存中一个大小适合的块。内存是匿名的,也就是说malloc()分配了内存,但没有为他指定名字。然而它却可以返回那块内存第一个字节的地址。因此,可以把该地址赋值给一个指针变量,并使用该指针来访问那块内存。malloc()函数可用来返回数组指针、结构指针等等。我们使用malloc()来创建一个数组,可以在程序运行时使用malloc()请求一个存储块,另外还需要一个指针来存放该块在内存中的位置。

double * ptd;

ptd=(double*)malloc(30 * sizeof(double));请求30个double类型的空间,把ptd指向该空间的位置。一般来说,对于每个malloc()函数调用,应该调用一次free(),free()的参数是malloc()返回的地址,它释放先前分配的内存。

时间: 2024-10-10 01:48:45

分配内存malloc()和free()的相关文章

分配内存malloc和free()

所有的程序都必须留出足够的内存来存储它们使用的数据.一些内存分配是自动完成的.在运行时需要分配更多的内存.主要的工具是函数malloc(),它接受一个参数:所需要内存字节数.然后malloc找到可用内存中一个大小合适的块.内存是匿名的:也就是说,malloc()分配了内存,但没有为它指定名字.然而,它却可以返回那块内存第一个字节的地址.因此,可以把那个地址赋值给一个指针变量,并使用该指针来访问那块内存. char place[] = "Dancing Oxen Creek"; 因为ch

在dll里malloc/new/cvCreate分配内存,在exe里free/Releases释放内存时会出错。

写了个程序,在DLL中用malloc分配了一块内存,但是在exe程序中释放,结果程序crash,原因就是:其原因可能是堆被损坏,这也说明 TestMySticker.exe 中或它所加载的任何 DLL 中有 bug. 以下文字引用自 http://hi.baidu.com/huhe/blog/item/0b422edd1f1563d98c1029a3.html 一个模块一个堆,一个线程一个栈. dll里malloc的内存,在exe里free会出错. CRT(C运行时期库)不是使用进程缺省的堆来实

C++ 内存、new与malloc分配内存区别?

一关于内存 1.内存分配方式 内存分配方式有三种: (1)从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2)在栈上创建.在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. (3) 从堆上分配,亦称动态内存分配.程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或de

内存分配机制malloc&&alloca&&realloc

<1>从静态存储区域分配.       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2>在栈上创建       在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. <3>从堆上分配,亦称动态内存分配.       程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用fr

内存分配(malloc,new,VirtualAlloc,HeapAlloc,GlobalAlloc,LocalAlloc)区别与注意

malloc()头文件:#include <malloc.h> 或 #include <alloc.h> (注意:alloc.h 与 malloc.h 的内容是完全一致的.)功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL.当内存不再使用时,应使用free()函数将内存块释放. C运行库中的动态内存分配函数,主要用于ANSI C(C语言的标准)程序中,是标准库函数.WINDOWS程序基本不再使用这种方法进行内存操作,

第十二章 分配内存: malloc ()与free () 及calloc()

 malloc () : 它接受一个参数,即所需内存字节数.如果成功,则返回该空间首地址,该空间没有初始化,如果失败,则返回NULL ,(但是找到的内存是匿名的) (分配类型 *)malloc(分配元素个数 *sizeof(分配类型)) 例子: double * ptb; ptb = (double * ) malloc (30 * sizeof (double )); 这段代码请求30个 double类型值的空间,并且把ptb指向该空间所在位置,注意ptb是作为一指向一个double类型值

c malloc分配内存

php中的内存分配有用类似emalloc这样的函数,emalloc实际上是C语言中的malloc的一层封装,php启动后,会向OS申请一块内存,可以理解为内存池,以后的php分配内存都是在这块内存池中进行的,以至于efree,也不会向OS退回内存,而只是设置标志位,标识efree这块内存不再使用了,这样做的好处是,速度快,避免系统调用,因为频繁的从用户态和内核态之间的切换是很费CPU的. C语言的malloc函数的后面是glibc(内存管理系统) , 前段时间在看到php内存分配时,看到了ema

探究操作系统的内存分配(malloc)对齐策略

问题: 我们在写程序的时候经常发现程序使用的内存往往比我们申请的多,为了优化程序的内存占用,搅尽脑汁想要优化内存占用,可是发现自己的代码也无从优化了,怎么办?现在我们把我们的焦点放到malloc上,毕竟我们向系统申请的内存都是通过它完成了,不了解他,也就不能彻底的优化内存占用. 来个小例子 //g++ -o malloc_addr_vec  mallc_addr_vec.cpp 编译 2 #include<iostream> 3 using namespace std; 4 int main(

@清晰掉 malloc是如何分配内存的?

任何一个用过或学过C的人对malloc都不会陌生.大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉.但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至把malloc当做操作系统所提供的系统调用或C的关键字.实际上,malloc只是C的标准库中提供的一个普通函数,而且实现malloc的基本思想并不复杂,任何一个对C和操作系统有些许了解的程序员都可以很容易理解. 这篇文章通过实现一个简单的malloc来描述malloc背后的机制.当然与现有C的标准库