常见内存分配函数

原创 2016年08月30日 20:08:23

常见内存分配函数


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[n],每一个指针指向小块内存的首地址

Linux常见内存分配函数

  • 2014年02月21日 20:17
  • 134KB
  • 下载

[Linux内存]linux内存分配函数总结

1,linux内核内存分配函数总结 单位 接口 算法 动态大小 kmalloc/kfree/krealloc/kcalloc 按大小组织的缓存数组 固定...
  • u013686805
  • u013686805
  • 2014-08-12 14:00:02
  • 520

******************* 常见的内存分配函数 *******************

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- //  常见的内存分配函数 // //  Cr...
  • qq_26765381
  • qq_26765381
  • 2015-03-24 15:27:53
  • 233

常见动态分配内存分配函数

1.malloc函数的使用方法 : void *malloc(unsigned size); 其中size是指的分配内存的字节 void *malloc(unsigned size)...
  • cw0028
  • cw0028
  • 2015-09-11 11:16:22
  • 365

关于内存分配若干问题

  • 2011年04月21日 16:33
  • 4.76MB
  • 下载

内存分配函数(C语言)

C 标准函数库提供了许多函数来实现对堆上内存管理 malloc函数:malloc函数可以从堆上获得指定字节的内存空间(必须初始化) free函数:释放内存,防止内存泄露 calloc函数:与 m...
  • u014427196
  • u014427196
  • 2016-09-18 02:10:47
  • 1524

常见内存分配算法及优缺点

常见内存分配算法及优缺点如下:   (1)首次适应算法。使用该算法进行内存分配时,从空闲分区链首开始查找,直至找到一个能满足其大小需求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配...
  • xuwanlong111
  • xuwanlong111
  • 2014-09-16 10:15:48
  • 3403

函数调用和栈的内存分配过程分析

学习程序到底怎么调用的和内存怎样分配的,其实了解函数的调用和堆栈的内存管理是很有必要的。程序的代码是存放在代码区的,一般代码区为只读的,不可修改的,道理很简单就是程序的安全性。其他的常量什么的也有自己...
  • longronglin
  • longronglin
  • 2008-03-29 19:19:00
  • 2893

Linux常用内核态内存分配方式总结

  Linux常用内核态内存分配方式总结一、             alloc_pages类此类函数主要包括:struct page * alloc_page(unsigned int gfp_ma...
  • gxfan
  • gxfan
  • 2008-07-28 11:14:00
  • 6953

Windows以及c++内存分配方式

Windows内存分配方式 Win32的堆分配函数 每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,...
  • qq_36631758
  • qq_36631758
  • 2017-07-25 11:07:58
  • 101
收藏助手
不良信息举报
您举报文章:常见内存分配函数
举报原因:
原因补充:

(最多只允许输入30个字)