void *malloc(size_t size)因为返回类型为空,所以可以赋值到任何类型指针,其分配的空间大小为size,返回新分配内存地址的起始处的指针,其所分配的内存未经初始化,若分配失败返回NULL

void free(void *ptr)
虽然在程序结束后,程序会自动释放内存,但最好还是用free()显式释放内存资源

[root@bogon code]# cat d.c
#include<stdio.h>
#include<stdlib.h>
#include<error.h>
struct studinfo
{
int id;
char name[20];
int age;
};
int main()
{
struct studinfo *p;
p=malloc(sizeof(struct studinfo));
if(p==NULL)
perror("malloc");
else
printf("malloc succeed\n");
free(p);
return 0;
}
[root@bogon code]# gcc d.c
[root@bogon code]# ./a.out
malloc succeed
[root@bogon code]#

mtrace()内存分配跟踪,muntrace()取消内存分配跟踪

mcheck()和mprobe()对已分配内存块进行一致性检查

mallinfo()返回一个结构,其中包含有malloc()分配内存的各种统计数据

void *calloc(size_t numitems,size_t size)该函数用于给一组相同对象分配内存,第一个参数是对象数量,第二个参数是每个对象大小,返回的也是其分配的的内存起始处的指针,与malloc()不同,该函数会将已分配的内存初始化为0
举个例子

[root@bogon code]# cat d.c
#include<stdio.h>
#include<stdlib.h>
#include<error.h>
struct studinfo
{
int id;
char name[20];
int age;
};
int main()
{
struct studinfo *p;
p=calloc(10,sizeof(struct studinfo));
if(p==NULL)
perror("calloc");
else
printf("calloc succeed\n");
free(p);
return 0;
}
[root@bogon code]# ./a.out
calloc succeed
[root@bogon code]#

应尽量避免使用calloc
调整某块内存大小
void *realloc(void *ptr,size_t size)
ptr需要调整的内存块指针,size指调整的大小,错误返回NULL

分配对齐的内存,起始地址要与2的整数次幂边界对齐
void *memalign(size_t boundary,size_t size)
起始地址是boundary的整数倍,分配的内存大小为size个字节,有些linux系统可能不支持该函数。

在堆栈上分配内存
void *alloca(size_t size)需要头文件为alloca.h
该函数是通过增加栈帧的大小从堆栈上分配,其分配的内存不需要free()释放,也无法通过realloc()来调整其内存大小
使用alloca()分配内存相对与malloc()具有一定的优势,因为alloca分配速度快,而且alloca也不需要维护空闲内存块列表。另外,alloca分配的内存随栈帧的移除而自动释放

函数的具体使用可以使用man 函数名 查看

malloc,calloc,alloca和free函数的更多相关文章

  1. c语言中的内存分配malloc、alloca、calloc、malloc、free、realloc、sbr

    C语言跟内存分配方式 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数时,函数内局部变 ...

  2. realloc,malloc,calloc函数的区别

    from:http://www.cnblogs.com/BlueTzar/articles/1136549.html realloc,malloc,calloc的区别 三个函数的申明分别是: void ...

  3. C语言跟内存分配方式-alloc malloc calloc

    转载:http://blog.csdn.net/ubuntulover/article/details/7581317 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整 ...

  4. Linux中brk()系统调用,sbrk(),mmap(),malloc(),calloc()的异同【转】

    转自:http://blog.csdn.net/kobbee9/article/details/7397010 brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的:  ...

  5. malloc,calloc,realloc三者的区别

    malloc,calloc,realloc三者都可以运用与动态分配数组. malloc:用malloc必须要自己初始化,可以用memset(arr,0,cnt*sizeof(int)) calloc: ...

  6. C:malloc/calloc/realloc/alloca内存分配函数

    原文地址:http://www.cnblogs.com/3me-linux/p/3962152.html calloc(), malloc(), realloc(), free(),alloca() ...

  7. malloc/calloc/realloc/alloca内存分配函数

    calloc(), malloc(), realloc(), free(),alloca() 内存区域可以分为栈.堆.静态存储区和常量存储区,局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取 ...

  8. C++malloc,calloc,realloc,free函数

    在进行C/c++编程的时候,需要程序员对内存的了解比较清楚,经常需要操作的内存可分为下面几个类别:     1.堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等, ...

  9. C/C++ 动态存储分配 malloc calloc realloc函数的用法与区别

    C++内存分配 https://blog.csdn.net/zhangxiao93/article/details/43966425

随机推荐

  1. day29 socketsever ftp功能简单讲解

    今日所学 一.ftp上传简单实例 二.socketsever的固定用法 三.验证合法性连接 1.ftp上传实例 这个题目是我们现在网络编程比较基础一点的题目 下面我们只写简单上传的代码 上传服务端的代 ...

  2. 【转载一】Grafana –美观、强大的可视化监控指标展示工具

    在之前的InfluxDB系列教程 中,我们给大家介绍了当下流行的一款时序数据库--InfluxDB. 接下来给大家带来一款强大的,与InfluxDB搭配使用的前端指标项展示项目--Grafana. G ...

  3. 《Python》IO模型

    一.IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下: 同步:一件事情做完再做另一件事情 异步:同时做多件事情 阻塞:sleep.input.join.shutdown.get.acquire ...

  4. 戴尔poweredge r730服务器配置以及系统安装

    第一次给服务器安装的是ubantu系统: 首先我们开机进入小型BIOS设置一下RAID,或者进入服务器管理系统,在系统的BIOS中进行RAID设置: 开机后当看到出现< Ctrl > &l ...

  5. Python3.7.0的安装方法

    安装Python3.7.0 1.下载Python-3.7.0.tar.xz包安装 wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.t ...

  6. Android简易项目--傻瓜式阿拉伯语输入法(Dummy Arabic Input)

    一.应用名称 Android简易项目--傻瓜式阿拉伯语输入法(Dummy Arabic Input) 二.应用图标 三.应用说明 现在通行的阿拉伯语键盘布局并无规律可循,阿拉伯语使用者需要花费较多时间 ...

  7. DevExpress WPF v18.2新版亮点(二)

    买 DevExpress Universal Subscription  免费赠 万元汉化资源包1套! 限量15套!先到先得,送完即止!立即抢购>> 行业领先的.NET界面控件2018年第 ...

  8. 玩转 React【第02期】:恋上 React 模板 JSX

    往期回顾 前文中我们讲解了利用 ReactElement 来编写React程序,但是我们也看到这种方式编写 React 特别的麻烦,而且层级结构特别不清晰.今天我们来看一种优雅的编写React的代码的 ...

  9. L251

    Beer before wine, or wine before beer; whatever the order, you’ll feel queer. That, at least, is the ...

  10. angular5 自定义指令 输入输出 @Input @Output(右键点击事件传递)

    指令写法,angular5官网文档给的很详细. 首先要创建一个文件,需注意命名规范(后缀名为xxx.directive.ts): 今天要记录的是在多个li中,右键点击之后显示出对应的菜单,直接上图吧! ...