常见内存分配函数
2016-08-30 20:08
232 查看
常见内存分配函数
1 . kmalloc 内核函数#include <linux/slab.h> void *kmalloc(size_t size, int flags);//最大为 128k void kfree(void *ptr);
kmalloc分配一块物理空间和虚拟空间都连续,大小为size的内存。
常用的flags标志有:
GFP_ATOMIC
用来从中断处理和进程上下文之外的其他代码中分配内存. 从不睡眠.
GFP_KERNEL
内核内存的正常分配. 可能睡眠.最常用的,(内部最终调用 __get_free_pages)
GFP_USER
用来为用户空间页来分配内存; 它可能睡眠.
例如: P=(int*)kmalloc(n*sizeof(int),GFP_KERNEL);//返回值是一个指向内存开始的指针
2 . kzalloc 内核函数
#include <linux/slab.h> void *kzalloc(size_t size, gfp_t flags); void kfree(void *ptr);
用kzalloc申请内存的时候,效果相当于先是用 kmalloc()申请空间,然后用 memset(0) 来初始化。
参数参考kmalloc();
3 . vmalloc 内核函数
#include <linux/vmalloc.h> void *vmalloc(unsigned long size); void vfree(void * addr);
vmalloc 在虚拟内存空间分配一块较大的连续内存区(虚拟内存空间连续,物理内存不一定连续)
函数可能引起睡眠,中断中最好不采用该函数分配内存。
4 . __get_free_page 内核函数
#include <linux/gfp.h> __get_free_page(unsigned long int gfp_mask);//(内部调用 __get_free_pages)
申请一块物理和虚拟内存都连续的内存。
5 . malloc 用户空间函数
#include <stdlib.h> void *malloc(size_t size);//单位 bytes void free(void *ptr);
malloc是动态分配一块连续的内存,malloc()的参数是一个指定所需字节数的整数,
内存没有被初始化。
例如:P=(int*)malloc(n*sizeof(int));//返回值是一个指向内存开始的指针
6 . calloc 用户空间函数
#include <linux/slab.h> void *calloc(size_t nmemb, size_t size);//单位 bytes void free(void *ptr);
calloc和malloc使用相似,主要的区别是分配内存初始化默认值为0。
colloc需要两个参数,第一个是需要分配内存的变量的个数,第二个是每个变量的大小.
例如:P=(int*)calloc(n,sizeof(int));
//返回值是一个数组指针,p[1]~p
,每一个指针指向小块内存的首地址
相关文章推荐
- Linux内核中常见内存分配函数
- Linux内核中常见内存分配函数(二)
- Linux内核中常见内存分配函数(二) 分类: arm-linux-Ubuntu 2013-08-08 17:58 723人阅读 评论(0) 收藏
- Linux内核中常见内存分配函数(二)
- Linux内核中常见内存分配函数
- Linux内核中常见内存分配函数介绍
- Linux内核中常见内存分配函数(二)
- 常见的Linux内核中内存分配函数
- 黑马程序员——C语言——常见内存分配函数和构造类型
- Linux内核中常见内存分配函数【转】
- Linux内核中常见内存分配函数
- Linux内核中常见内存分配函数
- Linux内核中常见内存分配函数(二)
- Linux内核中常见内存分配函数
- Linux内核中常见内存分配函数
- Linux内核中常见内存分配函数
- C++成员函数的内存分配问题
- VC常用内存分配函数HeapAlloc,GlobalAlloc,LocalAlloc,VirtualAlloc,Malloc,New的比较
- 常见的内存的分配错误及其对策
- Linux内存管理---内存分配函数的选择