C语言的动态分配内存
静态内存分配
定义:在C语言的程序空间中,可知代码区、常量区、全局数据区的内存在程序启动时就已经分配好了,这些地址空间大小固定,不能由程序分配和释放,只能等程序运行结束由系统来进行回收。
动态内存分配
定义:栈区和堆区的内存在程序运行期间可以根据实际需求来分配和释放,不用在
程序刚启动时就分配内存。
栈和堆的区别
- 栈区内存由系统分配和释放;堆区内存由程序员掌控。
- 程序启动时会为栈区分配一块大小适当的内存,再向这块已有内存中写入数据时,不会涉及内存的分配和释放,所以栈内存的分配效率要高于堆。
两种方法的优缺点
- 静态方法速度快,少去了向操作系统申请内存的时间,但是对内存的管理不够灵活,不能控制数据的作用范围,不能使用较大的内存。
- 动态内存对内存的管理更加灵活和高效,需要多少内存就使用多少内存,用完就可回收。
动态内存分配函数
-
malloc()
原型:void* malloc (size_t size);
作用:在堆区分配 size 字节的内存空间。
返回值:成功返回分配的内存地址,失败则返回NULL。
注意:分配内存在动态存储区(堆区),手动分配,手动释放,申请时