malloc,calloc,alloca和free函数
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函数的更多相关文章
- c语言中的内存分配malloc、alloca、calloc、malloc、free、realloc、sbr
C语言跟内存分配方式 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数时,函数内局部变 ...
- realloc,malloc,calloc函数的区别
from:http://www.cnblogs.com/BlueTzar/articles/1136549.html realloc,malloc,calloc的区别 三个函数的申明分别是: void ...
- C语言跟内存分配方式-alloc malloc calloc
转载:http://blog.csdn.net/ubuntulover/article/details/7581317 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整 ...
- Linux中brk()系统调用,sbrk(),mmap(),malloc(),calloc()的异同【转】
转自:http://blog.csdn.net/kobbee9/article/details/7397010 brk和sbrk主要的工作是实现虚拟内存到内存的映射.在GNUC中,内存分配是这样的: ...
- malloc,calloc,realloc三者的区别
malloc,calloc,realloc三者都可以运用与动态分配数组. malloc:用malloc必须要自己初始化,可以用memset(arr,0,cnt*sizeof(int)) calloc: ...
- C:malloc/calloc/realloc/alloca内存分配函数
原文地址:http://www.cnblogs.com/3me-linux/p/3962152.html calloc(), malloc(), realloc(), free(),alloca() ...
- malloc/calloc/realloc/alloca内存分配函数
calloc(), malloc(), realloc(), free(),alloca() 内存区域可以分为栈.堆.静态存储区和常量存储区,局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取 ...
- C++malloc,calloc,realloc,free函数
在进行C/c++编程的时候,需要程序员对内存的了解比较清楚,经常需要操作的内存可分为下面几个类别: 1.堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等, ...
- C/C++ 动态存储分配 malloc calloc realloc函数的用法与区别
C++内存分配 https://blog.csdn.net/zhangxiao93/article/details/43966425
随机推荐
- 关于js的对象原型继承(一)
javascript中,对象的继承是通过原型去继承. 可以这样理解:js中的对象,包含的除了属性和方法,还有一个最基本的原型__proto__对象.这个原型__proto__指向谁,这个对象就继承谁. ...
- PC/FORTH定点原理
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- 下载python中package的简便方法
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xxx
- 4.8 C++ typeid操作符
参考:http://www.weixueyuan.net/view/6378.html 总结: typeid操作符用于判断表达式的类型,注意它和sizeof一样是一个操作符而不是函数. 如果需要使用t ...
- MVC无刷新上传图片并显示
@{ ViewBag.Title = "Home Page"; } <script src="../../Scripts/swfobject.js" ty ...
- TextRank算法
TextRank是一种用来做关键词提取的算法,也可以用于提取短语和自动摘要.因为TextRank是基于PageRank的,所以首先简要介绍下PageRank算法. (1)PageRank PageRa ...
- 『转』android官网翻译好的蓝牙API接口说明
Develop API Guides 连接 蓝牙 本文内容 基础知识 蓝牙权限 设置蓝牙 查找设备 查询配对的设备 发现设备 连接设备 连接为服务器 连接为客户端 管理连接 使用配置文件 供应商特定的 ...
- chromium ④
chromium的源码非常大,选择合适的点入手能省不少力气.在 win7下编译chromium中我曾提到学习chromium源码的一个小工程test_shell,代码目录在src/webkit/too ...
- Beta阶段冲刺---Day4
一.Daily Scrum Meeting照片 二.今天冲刺情况反馈 昨天已完成的工作: (1)闯关模式排行榜代码编写: (2)闯关模式结束时的代码编写: (3)闯关模式开始时的代码编写. 今天计划完 ...
- 【转载】 大龄码农那些事——也谈996.ICU
原文地址: https://www.cnblogs.com/helloyaren/p/10657414.html 请扫码关注!!! 您的关注将是您做的最正确的事情!!! 大龄码农那些事专注分享大龄码农 ...