Linux内存管理 内存分配函数的选择
内存分配函数的选择
如果你需要连续的物理页,就可以使用某个低级页分配器或者kmalloc()。这是内核中内存分配的常用方式,也是大多数情况下你自己应该使用的内存分配方式。传递给这些函数最常用的两个标志是GFP_AUTOMIC和GFP_KERNEL。GFP_AUTOMIC表示进行不睡眠的高优先级分配。这是中断程序和其他不能睡眠的代码段的需要。对于可以睡眠的代码,比如没有持自旋锁的进程上下文代码,则应该使用GFP_KERNEL获取所需内存。这个标志表示,如果有必要,分配时可以睡眠。
如果想从高端内存进行分配,就使用alloc_pages()。alloc_pages()函数返回一个指向struct page结构的指针,而不是指向某个逻辑地址的指针。因为高端内存很有可能并没有被映射,因此访问它的唯一方式是通过相应的struct page结构。为了获得真正的指针,应噶调用kmap(),把高端内存映射到内核的逻辑地址空间。
如果你不需要物理上连续的页,而仅仅需要虚拟地址上连续的页, 那么就使用vmalloc()(不过要记住vmalloc()相对kmalloc()有一定的性能损失)。vmalloc()分配的内存虚拟地址式是连续的,但它本身并不能保证物理上的连续。这与用户空间的分配非常类似,它也是把物理内存块映射到连续的逻辑地址空间上。
如果你要创建和销毁很多较大的数据结构,那么应该考虑建立slab高速缓存。Slab层会给每个处理器维持一个对象高速缓存(空闲链表),这种高速缓存会极大的提高对象分配和回收的性能。Slab层不是频繁地分配和释放内存,而是为你把事先分配好的对象存放到高速缓存中,当你需要一块新的内存来存放数据结构时,slab层一般无需另外去分配内存,而只需从高速缓存中得到一个对象就可以了。
相关文档:
一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......
#include <stdio.h>
#include <signal.h>
#include <ctype.h>
#include <fcntl.h>
int g_count;
void Exit()
{
printf("I will exit, press any key to continue...(g_count = %d)\n", g_count);
exit(0);
}
int main(int argc, char* argv[])
{
struct sigaction almact;
pid_t ......
1、下载MySQL免安装版/二进制版软件(不用编译)
文件格式:MYSQL-VERSION-OS.tar.gz
2、创建MySQL组,建立MySQL用户并加入到mysql组中
(不同版本的Unix中,groupadd和useradd的语法可能会稍有不同。)
#groupadd mysql
#useradd -g mysql mysql
3、进入目录/usr/local,解压缩免安装版,并在 ......
Console 修改/etc/inputrc文件
set bell-style off
VIM 如果是在 console 模式下使用 vi/vim,一旦按错键会发出 bi 的一声,这样做可以提醒我们,但是很多时候会影响其他人工作、学习或者休息,如何关闭呢?
可以在 vi/vim 中使用
:set noeb
命令(其中 noeb 是 noerrorbells 的缩写) ......