易截截图软件、单文件、免安装、纯绿色、仅160KB

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层一般无需另外去分配内存,而只需从高速缓存中得到一个对象就可以了。
 


相关文档:

实战Linux Bluetooth编程(三) HCI层编程

1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI)  就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......

linux 你是我的希望

我是一个平凡的软件工程师
一直希望国产软件能够大放异彩
可正所谓希望越大,失望也越大
越来越感觉到要想把软件做大做强
实在是太难太难了
愚昧如我怎么也看不到光明的大道
可是难就不做了
多少智者,总是看准了一个方向,坚持在一个小的领域做细做专做强.......
linux给了很多人一个希望,开源的世界让很多人如痴 ......

Linux下守护进程的创建例子

#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 ......

Linux 修改IP、DNS和路由配置

在Linux操作系统下修改IP、DNS和路由配置 
  ifconfig eth0 新ip
  然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip
  一、修改IP地址
  [aeolus@db1 network-scripts]$ vi ifcfg-eth0
  DEVICE=eth0
  ONBOOT=yes
  BOOTPROTO=static
  IPADDR=219.136.241.211
  NETMASK=255 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号