C - malloc
C语言–备忘
C - 内存分配
- C语言--备忘
- 一、C 内存分配
- 1. 变量:
- 2. 数组:
- 3. Struct:
- 4. malloc 和 free:
- 1. malloc 函数
- 2. free 函数
- 3. 举例使用:
- 总结:
一、C 内存分配
1. 变量:
- 缺点:不能分配大量内存;[static, const, 动态,全局]
2. 数组:
- 数组:数据类型相同,可做到大量内存分配。
- 局部数组:访问范围有限。
- 全局数组:存在乱序访问,需要添加互斥保护,降低运行效率。
3. Struct:
- 可以数组成员来实现大量内存访问,同样存在数组缺陷;
- 做到分配大量内存,并且分配内存与数据类型无关。
4. malloc 和 free:
1. malloc 函数
- 功能:动态(随时随地)分配连续内存,必须使用free函数释放;
- 形参:size:指定要分配的内存大小,单位是字节 ;
- 返回值:返回分配的内存的首地址,注意做到强制类型转换;
如果分配失败,返回值NULL
#include <stdlib.h> //为了分配malloc和free
void *malloc(unsigned long size)
分配举例:
void *p=malloc(8);
if(NULL==p){printf("分配内存失败");return -1;
}else{*(int *)(p+0)=2;*(int *)(p+4)=3;//将p强制转换为int指针类型,P为首地址,int* 代表内容占据 4 字节printf("%d %d",*(int *)(p+0),*(int *)(p+4));
}
2. free 函数
- 功能:释放内存;注意释放指针:p=NULL
- 形参:传递 malloc 分配的内存的首地址 p
#include <stdlib.h>void free(void *p);
//调用此函数,即可随时释放malloc分配的内存,将内存资源归还给操作系统
注意:不要让指针乱指
free (p); // p指向的内存释放了
p = NULL; // 将指针置0,否则p成为野指针了
3. 举例使用:
#include <stdio.h>
typedef struct student{char *name[30];int age;int weight;
}stu_t;stu_t *get_stu_inform(void)
{//动态内存分配,只要不调用free,内存一直存在stu_t *stu1=(stu_t *)malloc(sizeof(stu_t));if(NULL==stu1){printf("分配失败"); return NULL;}memset(stu1,0,sizeof(stu_t));//清零//指定信息strcpy(stu1->name,"yujinlong");stu1->age=18;stu1->weight=180;return stu1;
}int main(int argc,char *argv[])
{//获取学生信息,p为malloc分配内存头指针stu_t *p=get_stu_inform();if(NULL==p){printf("分配失败"); return -1;} printf("%s %d %d",p->name,p->age,p->id);free();//malloc内存清空stu1=NULL;//清空指针return 0;
}
总结:
- 本节总结常见内存分配,C备忘结束。
C - malloc相关推荐
- malloc(0)-malloc 0 字节
C17中有如下描述: 7.22.3 Memory management functions 1 The order and contiguity of storage allocated by suc ...
- 连续地址数据(数组或者malloc的内存)作为函数参数
在编程时,一簇连续的内存单元,比如数组或者malloc的内存块,如下的数组a 或者指针p. int a[4]; int *p = malloc(4 * sizeof(int)); 我们要想修改上述连续 ...
- malloc为什么会报错:memory corruption
最近遇到一个问题,很有意思,在此记录下,以备后续参考. 程序运行异常,报错:malloc: memory corruption. 用gdb 调试程序,bt 如下,程序在申请344 bytes内存时失败 ...
- TCMalloc(Thread-Caching malloc) 基本设计原理
文章目录 背景 如何使用 架构概览 1. TCMalloc Front-end 1.1 小对象和大对象的内存分配过程 1.2 内存释放过程 1.3 Per-CPU mode 1.4 Per-threa ...
- 关于C语言中的malloc和free函数的用法
一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...
- 利用TCMalloc替换Nginx和Redis默认glibc库的malloc内存分配
TCMalloc的全称为Thread-Caching Malloc,是谷歌开发的开源工具google-perftools中的一个成员.与标准的glibc库的Malloc相比,TCMalloc库在内存分 ...
- TCMalloc:线程缓存的Malloc
转载自: http://shiningray.cn/tcmalloc-thread-caching-malloc.html 作者:Sanjay Ghemawat, Paul Menage 原文 翻译: ...
- 深入理解malloc和free
1.为什么free是void*,那么它怎么知道要释放多少内存? <UNIX环境高级编程> <C语言编程常见问题解答> <你必须知道的495个C语言问题> <U ...
- 【C++】new和malloc的区别
一.显而易见的区别 1.属性 new/delete是C++关键字,需要编译器支持: malloc/free是库函数,需要头文件支持. 2.参数 使用new操作符申请内存分配时,无须指定内存块的大小,编 ...
- malloc一次性最大能申请多大内存空间
受用户态内存地址空间的限制.64 位系统下分配几个 T 不成问题. 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:zz matrix 链接:http://www.zhi ...
最新文章
- python会调用linuxapi吗_RouterOS之python调用API
- 数据库中表id自增重置为1
- 代理(Proxy)及常见示例
- 步步为营(十六)搜索(二)BFS 广度优先搜索
- 16位转8位 winhex_078期中4位2复式3码232,排列五第19079期爱我彩规
- 网络基础知识----------iptables
- python九九乘法表求和,平均数,最大值,最小值、金字塔、等边三角形
- Mysql,ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
- 洛谷 P1356 数列的整除性
- unity控制程序等待_Unity 中的协同程序
- 从零开始带你部署springboot项目到ubuntu服务器05
- ES5-String-indexOf/lastIndexOf
- 帝友系统:中国P2P网络借贷可否复制Lending Club模式?
- 内网渗透之——域渗透中利用ms-14-068漏洞进行票据伪装获取域管账号密码
- 《计算机网络》-- 第一章 概述
- CSS:纯CSS3全屏背景图片幻灯片轮播
- 创业路上之谢谢周爱民
- 直播网站html代码,怎么生成嵌入网页直播的HTML代码
- 自制 计算机主板,三步教你如何DIY电脑主板和CPU的搭配
- mysql语句批量更新数据库_sql 更新批量数据库语句