用户态的内存分配

下面对用户态的内存分配函数进行一个总结。

/* 分配SIZE字节的内存 */
/* Allocate SIZE bytes of memory.  */
void *malloc(size_t size);
/* 分配NMEMB个元素,每个元素SIZE字节的内存,并全部初始化为0 */
/* Allocate NMEMB elements of SIZE bytes each, all initialized to 0.  */
void *calloc (size_t __nmemb, size_t __size);
/* 将之前分配的PTR指针从新分配,使新的块为SIZE字节 */
/* Re-allocate the previously allocated block in PTR, making the new block SIZE bytes long.  */
void *realloc (void *__ptr, size_t __size);
/* 释放由上述三个函数分配的内存块 */
/* Free a block allocated by `malloc', `realloc' or `calloc'.  */
void free(void *ptr);

其实在<malloc.h>中还有一个cfree函数,可以用来释放calloc分配的内存,man手册中写的是支持的平台不同,我们使用的时候就统一用free就好啦。

除了上述几个常用的分配函数以外,还有一些函数可以进行内存对齐并分配。

/* 按ALIGNMENT对齐,来分配SIZE字节 */
/* Allocate SIZE bytes allocated to ALIGNMENT bytes.  */
void *memalign (size_t __alignment, size_t __size);/* 已弃用,等同于valloc, 不过会把结果四舍五入到最近似的页面大小 */
/* Equivalent to valloc(minimum-page-that-holds(n)), that is, round up _size to nearest pagesize. */
void *pvalloc (size_t __size);/* 已弃用,在页的边界分配SIZE字节的内存,大小需是页大小的倍数,相当于按页对齐,该内存不能被释放 */
/* Allocate SIZE bytes on a page boundary.  The storage cannot be freed.  */
void *valloc (size_t __size);/* 分配SIZE字节的内存,并按ALIGNMENT进行对齐 */
/* Allocate memory of SIZE bytes with an alignment of ALIGNMENT.  */
int posix_memalign (void **__memptr, size_t __alignment, size_t __size);/* ISO C版本的对齐分配 */
/* ISO C variant of aligned allocation.  */
void *aligned_alloc (size_t __alignment, size_t __size);//The functions memalign(), valloc(), and pvalloc() have  been  available  in  all  Linux  libc libraries.
//The function aligned_alloc() was added to glibc in version 2.16.
//The function posix_memalign() is available since glibc 2.1.91.

由于malloc/calloc/realloc都是默认8字节对齐分配的,所以如果需要更大字节对齐的场合,就需要调用这些函数。这些成功分配的内存在释放的时候也需要通过free函数。
其中pvalloc,valloc已经被弃用,猜测可能是不可被释放的原因吧。

那么问题来了,什么场景下需要大字节对齐呢?
这是个遗留问题,等遇到需求场景的时候进行补充,或者有看到这篇文章的同学可以提醒一下。

内核态的内存分配

//获得页
struct page *alloc_pages(gfp_t gfp_mask, unsigned int order);
//释放页
void free_pages(unsigned long addr, unsigned int order);//按字节获取内核内存,该内存在物理内存上是连续的
void *kmalloc(size_t size, gfp_t flags);
void kfree(const void *);//按字节获取内核内存,该内存只在虚拟内存上是连续的
//主要用于获取大块内存
void *vmalloc(unsigned long size);
void vfree(const void *addr);

C语言alloc函数总结相关推荐

  1. C语言字符串函数大全

    转载自http://www.360doc.com/content/08/0723/22/26860_1462024.shtml# C语言字符串函数大全 函数名: stpcpy 功能: 拷贝一个字符串到 ...

  2. c语言各常用函数,c语言常用函数速查手册 pdf

    C语言常用函数速查手册是一本非常全面系统的讲述了学习c语言相关的常用函数,包括常见的350多个常用函数,且每一个常用函数后面都会有一个经典的示例帮助更快掌握C语言,欢迎下载. 图书简介: 为了方便查找 ...

  3. 写的函数符号表里没有_你有没有想过,C语言 main 函数到底为啥这么写?

    但凡是学过C语言的人,都知道要先写main函数,然而很多时候我们看到的main函数却各有差异,这究竟是为啥?哪种是对的呢?今天我们就来聊聊main函数. 那么main函数一共有多少个版本呢? 1.ma ...

  4. R语言str_trim函数去除字符串中头部和尾部的空格

    R语言str_trim函数去除字符串中头部和尾部的空格 目录 R语言str_trim函数去除字符串中头部和尾部的空格 #导入包和库 #仿

  5. R语言sqrt函数为数值开平方根实战

    R语言sqrt函数为数值开平方根实战 目录 R语言sqrt函数为数值开平方根实战 #基本语法 #sqrt函数开平方根

  6. R语言数学函数:abs绝对值、sqrt平方根、ceiling向上近似整数、floor向下近似整数、trunc去除小数部分、round近似到指定小数位、signif近似到有效数字、三角函数、指数、对数

    R语言数学函数:abs绝对值.sqrt平方根.ceiling向上近似整数.floor向下近似整数.trunc去除小数部分.round近似到指定小数位.signif近似到有效数字.三角函数.指数.对数 ...

  7. R语言sd函数计算数值标准差实战(Standard Deviation)

    R语言sd函数计算数值标准差实战(Standard Deviation) 目录 R语言sd函数计算数值标准差实战(Standard Deviation) #基本语法 #sd

  8. R语言optimize函数一维优化实战

    R语言optimize函数一维优化实战 目录 R语言optimize函数一维优化实战 #基础语法 #优化用户自定义的函数

  9. R语言rev函数对数据对象(向量、dataframe通过行或者列)反序实战

    R语言rev函数对数据对象(向量.dataframe通过行或者列)反序实战 目录 R语言rev函数对数据对象(向量.dataframe通过行或者列)反序实战

  10. R语言用户自定义函数的语法结构、编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)、编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)、应用自定函数

    R语言用户自定义函数的语法结构.编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等).编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据).应用自定函数 ...

最新文章

  1. MATLAB里面的mean()如何使用:
  2. hadoop学习3 查找块的位置
  3. 专2-第二课 Eclipse开发环境搭建
  4. 吴恩达机器学习笔记四之正则化
  5. Java企业面试算法新得体会之3二叉树问题24问
  6. 飞书上线“程序员友好”功能 迎接1024程序员节
  7. Spring Cloud中如何保证各个微服务之间调用的安全性
  8. 2020-5-13从0在mac上搭载SSM新闻网站项目
  9. 数据结构一些自己没搞懂的点
  10. 四川大学计算机学院2020推免公示,2020年四川大学计算机(软件)学院夏令营接收推免生条件...
  11. java网店系统 开源_网店系统javashop发布其开源框架,遵循GPL协议
  12. 实战攻防比赛中作为防守方需要做哪些工作
  13. SQL语句查询:查询本周过生日的信息
  14. 关于WireShark跟随数据流后entire conversation显示的字节数分析
  15. 如何让虚拟角色自然融入现实?
  16. 数据挖掘综合应用:贷款产品预测案例
  17. 正确重启计算机的方法,电脑一开机就会出现 重启并选择正确的启动设备或在选定的启动设...
  18. 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
  19. 【编写if时尽量不要带else】
  20. 通过云端自动生成openmv的神经网络模型,进行目标检测

热门文章

  1. 嵌入式硬件常见英文总结
  2. html设计判断闰年,javascript如何判断是否为闰年?
  3. 源于《赘婿》电视剧 拼多多申请“拼刀刀”商标
  4. 外汇EA黄金外汇避险抗膨胀
  5. UVA10066(DP)
  6. 全民一起VBA提高篇 第三十二回 Select 简化分枝结构,静态变量坐看沧海桑田
  7. C++类的构造函数及操作符()重载
  8. ipadpro尺寸的html,iPad Pro屏幕尺寸是多少?iPad Pro分辨率是多少?
  9. nodejs android ios,NodeJs 搭建WebSocket Push Server Web Android iOS Client
  10. 独孤求败——浅谈FireFox中file控件不能取到客户端文件的完整路径的问题