Linux_ 内存管理

  1. 内存管理

什么是内存?

内存是一种稀缺资源。

Linux程序不允许直接访问物理内存,都通过虚拟内存的方式访问。
物理地址
虚拟地址

Linux通过内核的”存储管理”,给用户提供了”虚拟内存”。
虚拟内存可以比实际的物理内存大。

  1. 内存分配
    1)简单的内存分配
    使用malloc
    以字节为单位进行分配
    返回一个虚拟内存地址。
    返回的类型是void *, 需要进行类型转换。

    注:
    int *buff = malloc(1024);
    //在赋值时,进行了自动类型转换
    //建议进行显式类型转换:int buff = (int)malloc(1024);

    不能对void*类型的指针直接读写。
    对void*类型指针进行访问时,需要先进行类型转换。

    实例:main1.c

  2. 分配大量的内存
    可以使用malloc分配大块的内存。
    malloc能分配的内存总量可以比实际物理内存大。
    实例:main2.c

    当物理内存快耗尽时,Linux将使用“交换空间”
    交换空间是当安装linux系统时分配的一个磁盘空间。
    linux把物理内存中的某些页“搬”到交换空间中,以得到更大的物理内存。
    当物理内存和交换空间都耗尽时,linux内核则把该应用程序“杀死”。
    实例:main3.c

  3. 内存的恶意使用
    当非法使用内存时,将产生“段错误”
    实例: main4.c

    空指针的使用
    linux不允许访问空指针。
    实例:main5.c

  4. 内存的释放
    free的参数,必须是malloc(或calloc/realloc)返回的指针!
    实例:main6.c

  5. 其他分配函数
    calloc
    realloc

posted @ 2016-03-31 13:12  夜色下的港湾  Views(154)  Comments(0Edit  收藏  举报