作者:好人木庄子mzz | 来源:互联网 | 2023-10-12 16:58
在读驱动程序时,常遇到内存申请函数。驱动程序属于内核空间,和用户空间用到的内存申请函数不同。内核空间最常用到的内存申请函数为kmalloc()和kzalloc()。kmalloc
在读驱动程序时,常遇到内存申请函数。驱动程序属于内核空间,和用户空间用到的内存申请函数不同。
内核空间最常用到的内存申请函数为kmalloc()和kzalloc()。
kmalloc()是申请一段内存空间Kernel memory allocation,并且这段内存空间是物理上连续的。
kmalloc()后常跟memset()使这段内存空间全清为0。kzalloc()申请了内存空间并且清0,z表示zero,
所以kzalloc()=kmalloc()+memset()。
kmalloc()原型:
kmalloc(size_t s,gfp_t flags)
实例:
data=kmalloc(datasize,GFP_KERNEL);
memset()原型:
void *memset(void *s,int c,size_t count)
实例:
memset(data,0,datasize)
kzalloc()原型:
static inline void *kzalloc(size_t s,gfp_t flags)
{
return kmalloc(size_t s,flags | _GFP_ZERO);
}
实例:
data=kzalloc(datasize,GFP_KERNEL)
内核空间还有几个内存申请函数vmalloc()。vmalloc()申请到的内存空间是可以物理上不连续的。
原型:void *vmalloc(unsigned long size)
使用:data=vmalloc(size)
在写应用程序的时候常用到malloc()
static void *malloc(int size)
data=malloc(size);