一、堆和栈的区别
1)栈(Stack):
- 栈是一种自动分配和释放内存的数据结构,存储函数的参数值、局部变量的值等。
- 栈的特点是后进先出,即最后进入的数据最先出来,类似于我们堆盘子一样。
- 栈的大小和生命周期是由系统自动管理的,不需要程序员手动释放。
2)堆(Heap):
- 堆是由程序员手动分配和释放的内存空间,也称为动态内存分配。
- 堆的特点是内存分配的顺序并不固定,可以随时分配和释放,需要程序员自行管理内存的分配和释放。
- 如果程序员在使用完堆中的内存后不进行释放,就会造成内存泄漏,导致程序运行速度变慢或者崩溃。
二、C语言开辟内存的方式
1)静态内存分配:
- 静态内存分配是在程序编译阶段就确定内存大小和位置的方式,例如全局变量、静态变量等。
- 静态内存分配的特点是内存空间固定,程序运行期间不会改变。
2)动态内存分配:
- 动态内存分配是在程序运行时根据需要动态分配内存空间的方式,主要通过
malloc
、calloc
、realloc
等函数实现。 - 动态内存分配的特点是灵活性高,可以根据程序运行时的需要动态调整内存空间的大小。
三、使用函数创建动态内存
1)使用malloc和free
使用函数malloc可以在C语言中动态创建内存。malloc函数的原型为:void* malloc(size_t size),其中size是要分配的内存大小,单位为字节。malloc函数会返回一个指向分配内存起始位置的指针,如果分配失败则返回NULL。
#include <stdio.h>
#include <stdlib.h>
int main()
{
//分配4个字节的动态内存,并转为int*类型
int *ptr = (int *)malloc(sizeof(int));
i