- 内存管理
什么是内存?
内存是一种稀缺资源。
Linux程序不允许直接访问物理内存,都通过虚拟内存的方式访问。
物理地址
虚拟地址
Linux通过内核的”存储管理”,给用户提供了”虚拟内存”。
虚拟内存可以比实际的物理内存大。
内存分配
1)简单的内存分配
使用malloc
以字节为单位进行分配
返回一个虚拟内存地址。
返回的类型是void *, 需要进行类型转换。注:
int *buff = malloc(1024);
//在赋值时,进行了自动类型转换
//建议进行显式类型转换:int buff = (int)malloc(1024);不能对void*类型的指针直接读写。
对void*类型指针进行访问时,需要先进行类型转换。实例:main1.c
分配大量的内存
可以使用malloc分配大块的内存。
malloc能分配的内存总量可以比实际物理内存大。
实例:main2.c当物理内存快耗尽时,Linux将使用“交换空间”
交换空间是当安装linux系统时分配的一个磁盘空间。
linux把物理内存中的某些页“搬”到交换空间中,以得到更大的物理内存。
当物理内存和交换空间都耗尽时,linux内核则把该应用程序“杀死”。
实例:main3.c内存的恶意使用
当非法使用内存时,将产生“段错误”
实例: main4.c空指针的使用
linux不允许访问空指针。
实例:main5.c内存的释放
free的参数,必须是malloc(或calloc/realloc)返回的指针!
实例:main6.c其他分配函数
calloc
realloc