zoukankan      html  css  js  c++  java
  • [Linux内存]linux内存分配函数总结

    linux内核相关

    1,linux内核内存分配函数总结

    单位 接口 算法
    动态大小 kmalloc/kfree/krealloc/kcalloc 按大小组织的缓存数组
    固定大小 kmem_cache_create/kmem_cache_destroy
    kmem_cache_alloc/kmem_cache_free
    Slab[2]
    2^n页 alloc_pages/free_pages
    __get_free_pages/__free_pages
    伙伴算法,分配若干(物理连续)页面,返回指向该区域第一个字节的指针

     vmalloc
    工作方式类似于kmalloc(), 不过虚拟地址连续,物理地址不连续。获得大块内存时使用,通常在creat_module()系统调用的地方使用。

    2,各种API应用举例

    kmem_cache_create和kmem_cache_alloc,比如在Namespace.c文件的mnt_int()函数中调用kmem_cache_creat()函数创建名为mnt_cache的缓存,然后在调用do_mount()函数的时候调用kmem_cache_alloc()函数分配一个mount结构体。

    用户层相关:

    3,malloc和calloc函数

    void *calloc(size_t n, size_t size);

    在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。calloc在动态分配完内存后,自动初始化该内存空间为零,而malloc不初始化,里边数据是随机的垃圾数据。
    extern void *malloc(unsigned int num_bytes);
    使用malloc()和calloc()函数分配的内存使用完以后一定要用free()函数将内存手动释放。

    malloc()函数申请到的内存空间在什么范围:答:0X00000000到0XBFFFFFFF

    4,linux内核有些地方分配内存不允许失败,这个时候应该如何保证

    答:使用内存池技术,内存池本质也是后背高速缓存,只是在使用前提前准备好,缺点是浪费内存。

  • 相关阅读:
    抽象类与抽象方法
    简单工厂模式
    面向对象的七种基本设计原则
    HashTable集合遍历的三种方法
    继承(父类为虚方法以及子类的重写)
    继承(is与as)
    Chrome OS 更新新版本可让Linux访问USB连接的Android设备
    谷歌对Intel 10nm进度不满
    盖茨对没能做好手机系统对抗苹果表示遗憾
    微软内部封杀 Slack
  • 原文地址:https://www.cnblogs.com/zhiliao112/p/4251232.html
Copyright © 2011-2022 走看看