Linux平台上几个常见内核内存分配函数

* kmalloc

Prototype:

#include

void *kmalloc(size_t size, int flags);

Kmalloc分配一段未清0的连续物理内存页,并返回虚存地址。有点是快,并且可指定flag,如DMA内存,高地址区域内存等。缺点是不能分配大于128KB(处于跨平台考虑),几个重要的flag:

GFP_ATOMIC

Used to allocate memory from interrupt handlers and other code outside of a process context. Never sleeps.

GFP_KERNEL

Normal allocation of kernel memory. May sleep.

GFP_USER

Used to allocate memory for user-space pages; it may sleep.

GFP_HIGHUSER

Like GFP_USER, but allocates from high memory, if any. High memory is described in the next subsection.

* slab allocator(lookaside cache)

从Memcached的实现知道有这么一个内存管理策略,其显着特点是分配一组相同大小的内存块作为内存池,其实现对应于源代码中的和mm/slab.c。

Prototype:

#include

kmem_cache_t *kmem_cache_create(char *name, size_t size, size_t offset,

unsigned long flags, constructor( ), destructor( ));

int kmem_cache_destroy(kmem_cache_t *cache);

/proc/slabinfo

A virtual file containing statistics on slab cache usage.

*__get_free_pages

Prototype:

_ _get_free_pages(unsigned int flags, unsigned int order);

返回2^order个未清0连续物理页面,flags与kmalloc中flags一致,允许的最大order值为10或者11(根据体系结构不同)

*alloc_pages

Prototype:

struct page *alloc_pages_node(int nid, unsigned int flags,

unsigned int order);

Kernel中页分配器实现,__get_free_pages即调用alloc_pages实现的

The real core of the Linux page allocator is a function called alloc_pages_node:

*vmalloc

分配地址连续虚存,而不保证物理地址连续,大部分情况下适合“软件”,而不是驱动程序。相对而言,kmalloc和__get_free_pages虚存map到物理内存只需要增减一个偏移,而使用vmalloc分配需要修改页表,故vmalloc的开销较大,分配少数几个页面的效率太低。

*per-cpu variables

Each cpu hold an independant copy in their respective processor's caches, so there is no lock required and improve better performance, implemented as a linux 2.6 feature. Defined in .

DEFINE_PER_CPU(type, name);

get_cpu_var(sockets_in_use)++;

put_cpu_var(sockets_in_use);相关阅读:

PHP完整的日历类(CLASS)

function, new function, new Function之间的区别

解析CSS列表样式属性list-style

discuz7 phpMysql操作类

LumaQQ的安装和使用

MYSQL导入导出命令详解

css利用A标签的背景可能作出很有意思的效果

javascript做的日历,完全对象化,望高手提出改进意见。(1/3,将3部分拼成一个html文件浏览)_QQGB.co

在Access2007中使用“多值”实现文字的sum

oracle时间用法

JavaScript教程:浅析JS运行机制

GhostXP装机版v3.0

查找乱码字符串的SQL

Vormetric推出Oracle和SQL Server数据库安全包

linux内核函数kmalloc,Linux_Linux平台上几个常见内核内存分配函数,* kmallocPrototype:#incl - phpStudy...相关推荐

  1. linux内核函数kmalloc,Linux内核内存分配函数之devm_kmalloc和devm_kzalloc

    本文介绍Linux内核内存分配函数devm_kmalloc()和devm_kzalloc(). 一.devm_kmalloc 文件:drivers/base/devres.c,定义如下: /** * ...

  2. Linux内核中内存分配函数

    1.原理说明 Linux内核 中采 用了一种同时适用于32位和64位系统的内 存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系 统中,用到了四级页表,如图2-1所示.四级页表分别为 ...

  3. Linux内核中常见内存分配函数

    1.      原理说明 Linux内核中采用了一种同时适用于32位和64位系统的内存分页模型,对于32位系统来说,两级页表足够用了,而在x86_64系统中,用到了四级页表,如图2-1所示.四级页表分 ...

  4. 替换libc中的内存分配函数

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 本文介绍如何替换glibc中的内存分配函数为自定义的内存分配函数的方法,可以方便调试内存分配,和查找内存管理错误而产生 ...

  5. C语言动态内存管理和动态内存分配函数

    给变量分配内存空间可分为静态内存分配和动态内存分配. 静态内存分配属于编译时给变量分配的空间,动态分配属于在程序运行时给变量分配的空间 静态分配属于栈分配,动态分配属于堆分配 运行效率上,静态内存比动 ...

  6. 内存分配函数 ExAllocatePool ExAllocatePoolWithTag

    如同C里面的malloc一样,内核模式下的ExAllocatePool也是非常重要的.但是一说到ExAllocatePool函数就不得不提ExAllocatePoolWithTag函数.对比一下两个函 ...

  7. 【C/C++】内存分配函数:malloc,calloc,realloc,_alloca

    [C/C++]内存分配函数:malloc,calloc,realloc,_alloca malloc: 原型:extern void *malloc(unsigned int num_bytes); ...

  8. 内存分配函数 malloc、realloc、calloc

    C 语言主要提供 malloc.realloc.calloc.alloca 与 aligned_alloc 等内存分配函数来实现对内存的分配功能. 1) malloc 函数原型如下: void * m ...

  9. c语言字符指针分配内存,内存分配函数及使用注意事项,C语言内存分配函数完全攻略...

    C 语言主要提供 malloc.realloc.calloc.alloca 与 aligned_alloc 等内存分配函数来实现对内存的分配功能. 1)malloc 函数原型如下: void * ma ...

最新文章

  1. matlab绘制圆,且求解两个圆的交点坐标
  2. java线程栅栏_Java 多线程基础 - CyclicBarrier
  3. 领域应用 | 从数据到智慧,知识图谱如何推动金融更智能?
  4. Python3解析XML文件(xml.etree.ElementTree)——以简单网络爬虫为例
  5. linux服务器文件名称乱码,linux中文文件名乱码怎么解决?
  6. 嵌入式串口打印信息重定向到当前终端界面
  7. python 正则表达式 分组_正则表达式之分组的用法
  8. 不是我发现了美,只不过这个世界本身就很美。记快乐的今年生日。
  9. 微信小程序蓝牙连接TSPL打印机打印图片思路
  10. 高校后勤管理系统java代码_《高校后勤管理系统的设计与实现》论文笔记二
  11. 梦龙即时通讯软件测试初学者,梦龙即时通讯软件
  12. Android自动伸展动画,Android:展开/折叠动画
  13. C# 绘制直角坐标系
  14. Android 点击按钮带有震动效果,使用Vibrator
  15. 数据结构:实现图书信息管理系统
  16. 【郭林专刊】自信还是危机感
  17. java实验报告:实验一 基于控制台的购书系统
  18. 家长怒进游戏群控诉:网瘾是表象 亲子关系问题是核心
  19. iOS Socket(1) —— 简介
  20. 30_Palette调色板

热门文章

  1. firefox+android+平板,Firefox OS首款平板现身,“三头并进”追赶Android
  2. 中国海洋大学计算机学院研究生导师,中国海洋大学硕士研究生导师介绍:唐瑞春...
  3. sdk没有登录什么意思_检查肝功能没有空腹,影响效果吗?转氨酶100是什么意思?...
  4. linux100day(day4)--文本处理三剑客
  5. JS 删除 cookie
  6. linux-free命令
  7. luogu P1058 立体图
  8. Codeforces Round #263 (Div. 2) D. Appleman and Tree(树形DP)
  9. c#使用HttpClient调用WebApi
  10. C/C++新建注册表项实例