C语言–备忘


C - 内存分配

  • C语言--备忘
  • 一、C 内存分配
    • 1. 变量:
    • 2. 数组:
    • 3. Struct:
    • 4. malloc 和 free:
      • 1. malloc 函数
      • 2. free 函数
      • 3. 举例使用:
  • 总结:

一、C 内存分配

1. 变量:

  1. 缺点:不能分配大量内存;[static, const, 动态,全局]

2. 数组:

  1. 数组:数据类型相同,可做到大量内存分配。
  2. 局部数组:访问范围有限。
  3. 全局数组:存在乱序访问,需要添加互斥保护,降低运行效率。

3. Struct:

  1. 可以数组成员来实现大量内存访问,同样存在数组缺陷;
  2. 做到分配大量内存,并且分配内存与数据类型无关。

4. malloc 和 free:

1. malloc 函数

  1. 功能:动态(随时随地)分配连续内存,必须使用free函数释放;
  2. 形参:size:指定要分配的内存大小,单位是字节 ;
  3. 返回值:返回分配的内存的首地址,注意做到强制类型转换;
    如果分配失败,返回值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 函数

  1. 功能:释放内存;注意释放指针:p=NULL
  2. 形参:传递 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;
}

总结:

  1. 本节总结常见内存分配,C备忘结束。

C - malloc相关推荐

  1. malloc(0)-malloc 0 字节

    C17中有如下描述: 7.22.3 Memory management functions 1 The order and contiguity of storage allocated by suc ...

  2. 连续地址数据(数组或者malloc的内存)作为函数参数

    在编程时,一簇连续的内存单元,比如数组或者malloc的内存块,如下的数组a 或者指针p. int a[4]; int *p = malloc(4 * sizeof(int)); 我们要想修改上述连续 ...

  3. malloc为什么会报错:memory corruption

    最近遇到一个问题,很有意思,在此记录下,以备后续参考. 程序运行异常,报错:malloc: memory corruption. 用gdb 调试程序,bt 如下,程序在申请344 bytes内存时失败 ...

  4. TCMalloc(Thread-Caching malloc) 基本设计原理

    文章目录 背景 如何使用 架构概览 1. TCMalloc Front-end 1.1 小对象和大对象的内存分配过程 1.2 内存释放过程 1.3 Per-CPU mode 1.4 Per-threa ...

  5. 关于C语言中的malloc和free函数的用法

    一.malloc()和free()的基本概念以及基本用法: 1.函数原型及说明: void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针 ...

  6. 利用TCMalloc替换Nginx和Redis默认glibc库的malloc内存分配

    TCMalloc的全称为Thread-Caching Malloc,是谷歌开发的开源工具google-perftools中的一个成员.与标准的glibc库的Malloc相比,TCMalloc库在内存分 ...

  7. TCMalloc:线程缓存的Malloc

    转载自: http://shiningray.cn/tcmalloc-thread-caching-malloc.html 作者:Sanjay Ghemawat, Paul Menage 原文 翻译: ...

  8. 深入理解malloc和free

    1.为什么free是void*,那么它怎么知道要释放多少内存? <UNIX环境高级编程> <C语言编程常见问题解答> <你必须知道的495个C语言问题> <U ...

  9. 【C++】new和malloc的区别

    一.显而易见的区别 1.属性 new/delete是C++关键字,需要编译器支持: malloc/free是库函数,需要头文件支持. 2.参数 使用new操作符申请内存分配时,无须指定内存块的大小,编 ...

  10. malloc一次性最大能申请多大内存空间

    受用户态内存地址空间的限制.64 位系统下分配几个 T 不成问题. 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:zz matrix 链接:http://www.zhi ...

最新文章

  1. python会调用linuxapi吗_RouterOS之python调用API
  2. 数据库中表id自增重置为1
  3. 代理(Proxy)及常见示例
  4. 步步为营(十六)搜索(二)BFS 广度优先搜索
  5. 16位转8位 winhex_078期中4位2复式3码232,排列五第19079期爱我彩规
  6. 网络基础知识----------iptables
  7. python九九乘法表求和,平均数,最大值,最小值、金字塔、等边三角形
  8. Mysql,ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
  9. 洛谷 P1356 数列的整除性
  10. unity控制程序等待_Unity 中的协同程序
  11. 从零开始带你部署springboot项目到ubuntu服务器05
  12. ES5-String-indexOf/lastIndexOf
  13. 帝友系统:中国P2P网络借贷可否复制Lending Club模式?
  14. 内网渗透之——域渗透中利用ms-14-068漏洞进行票据伪装获取域管账号密码
  15. 《计算机网络》-- 第一章 概述
  16. CSS:纯CSS3全屏背景图片幻灯片轮播
  17. 创业路上之谢谢周爱民
  18. 直播网站html代码,怎么生成嵌入网页直播的HTML代码
  19. 自制 计算机主板,三步教你如何DIY电脑主板和CPU的搭配
  20. mysql语句批量更新数据库_sql 更新批量数据库语句

热门文章

  1. 2018初春带妈妈逛苏州上海
  2. 高等几何——射影平面2
  3. 计算机硬件工匠精神,千锤百炼 雷神工匠精神定义笔记本行业新国货
  4. 超370亿美元资金布局NFT市场
  5. java arraylist comparator,关于java:如何使用Comparator对ArrayList进行排序?
  6. 驾校APP软件APP基本功能
  7. 使用 iMacros 来自动化日常的工作
  8. 400倍加速,PolarDB HTAP 实时数据分析技术解密
  9. 高斯消元相关问题学习和模板整理
  10. SAP中采购合同和计划协议类型默认值的设定实例