1、内存的组织方式
程序被组织成以下4个逻辑段
(1)可执行代码
(2)静态数据。可执行代码和静态数据存储在固定的内存位置
(3)动态数据(堆)。程序请求动态分配的内存来自内存池,也就是上面所列举的堆。
(4)栈。局部数据对象、函数的参数以及调用函数和被调用函数的联系放在成为栈的内存池中。
堆和栈可以是被所有同时运行的程序共享的操作系统资源,也可以是使用程序独占的局部资源。
2、堆和栈
(1)堆
在内存的全局存储空间中,
用于程序动态分配和释放的内存块称为自由存储空间,通常也称之为堆。
在C程序中,是用malloc和free函数来从堆中动态地分配和释放内存。
(2)栈
当程序调用函数和声明局部变量时,系统将自动的分配内存。
栈是一个
后进先出的压入弹出式的数据结构。
94动态管理
(1)malloc函数
void *malloc(unsigned int size);
在stdlib.h头文件中包含该函数,作用是在内存中动态的分配一块size大小的内存空间。malloc函数会返回一个指针,该指针指向分配的内存空间,如果出现错误,则返回NULL。
注意:使用malloc函数分配的内存空间是在堆中,,而不是在栈中。因此在使用完这块内存后一定要将其释放掉,释放内存空间使用的是free函数。
(2)calloc函数
void *calloc(unsigned n,unsigned size);
使用该函数也要包含stdlib.h头文件,其功能是在内存中动态的分配n个长度为size的连续内存空间数组。calloc函数会返回一个指针,该指针指向动态分配的连续内存空间地址。当分配空间错误时,返回NULL。
(3)realloc函数
void *realloc(void *ptr,size_t size);
使用该函数要包含头文件stdlib.h,其功能是改变ptr指针指向的空间大小为size大小。返回值是一个指向新地址的指针,如果出现错误,则返回NULL。
(4)free函数
void free(void *ptr);
free函数的功能是使用由指针ptr指向的内存区,使部分内存区能被其他变量使用。ptr是最近一次调用calloc或malloc函数时返回的值。free无返回值。
3、内存丢失
在使用malloc等函数分配内存后,要对其使用free函数进行释放。因为内存不进行释放会造成内存遗漏,从而可能会导致系统崩溃。