C语言学习笔记(十六)

内存管理
这是C语言学习笔记的最后一篇,今天来学习一下内存管理的知识。

内存的组织方式

程序被组织成4个逻辑段:
可执行代码和静态数据存储在固定的内存位置。
动态数据(堆):程序请求动态分配的内存,来自内存池(堆)。
栈:局部数据对象,函数的参数,调用函数和被调用函数的联系放在栈中。


在内存的全局存储空间中,用于程序动态分配和释放的内存块称为自由存储空间(堆)。

当程序调用函数和声明局部变量时,系统将自动分配内存,栈是一个后进先出的数据结构。
动态管理

如果是一个很小的程序,可以不考虑内存的释放,当程序关闭时内存将自动释放。如果程序很大就不得不考虑释放分配的内存。一般的内存的分配和释放是成对出现的,在某些情况下也可能造成内存泄露。
比如:

1
2
3
4
int *pOld = (int *)malloc(sizeof(int));
int *pNew = (int *)malloc(sizeof(int));
pOld = pNew;
free(pOld);

由于没有指针指向pOld原来指向的那块内存空间,所以这块内存空间就丢了。指针不能胡乱的指来指去,很容易就造成了内存丢失。要确保分配的每一块内存空间,一直都有指针指向它。