堆内存管理
malloc必须与free()成对出现
** malloc函数:**向堆空间申请变量或数组,malloc函数向堆上申请一个整型变量;堆上面的变量没有名字,只有地址;
堆(heap )区空间大,栈(stack)区空间小,栈内存存放的是地址,而堆内存存放的才是对象
管理方式:
对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域
堆:堆是向高地址扩展的数据结构,是不连续的内存区域。
分配方式:
堆都是动态分配的,没有静态分配的堆。
栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。
** free函数:**将申请的变量或数组的空间换回给堆,将申请的变量还回给堆,不会造成内存泄露
calloc函数:与malloc函数的唯一区别:calloc申请的堆空间释放后内存空间清0,所以效率较低;malloc函数不会清0
**realloc函数: **函数用来为ptr重新分配大小为size的一块内存
扩容时,原来的数据不会丢失
思考:如何接收任意多个字符?