高质量C编程03-内存

传送门《高质量C编程教程汇总》

1.程序设计本质

  • 所谓程序就是由实现算法的语句来操纵存放在计算机的内存中的数据.
  • 程序设计就是对内存直接或间接地使用.
  • 内存的分配和活动是编程者的第一要务

2.内存划分(4个区域)

内存划分

(1)代码区:

存放程序所有执行代码和常量,只读不可写.

(2)栈区(stack)

存放程序的局部变量和形参
①系统按栈原则管理:
进栈退栈-先进后出
②函数执行完则释放
③用户无法干预变量的诞生和消亡

(3)堆区(heap)

①长命
②无名
③用户干预变量的诞生和消亡
④在程序运行时动态分配内存
⑤申请可能失败(编程时需要判断)

if (Null == p)
{
    printf("Memory create Fail!\n");
    return 1;
}
(4)静态区(static)

存放程序的全局变量和静态变量
①不按栈原理管理
②长命
③生命周期:全程序
④不初始化时默认为0

3.堆空间的使用

(1)C中动态分配内存的函数
//申请堆内存
malloc();
calloc();

//释放内存
free();

使用这3个函数必须包含头文件stdlib.h

(2)malloc()
函数原型void * malloc(unsigned size);
功能从堆内存中分配连续大小为size字节的内存单元,这些单元没有类型
返回值若是有足够内存,返回指向分配内存空间的首地址,否则返回NULL
(3)calloc()
函数原型void * calloc(unsigned n,unsigned size);
功能分配n个size大小的内存连续空间,并将该块内存全部清零
返回值若内存足够,返回新分配内存首地址,否则返回NULL
(4)free()
函数原型void free(void *p);
功能用来释放被malloc()或calloc()分配的内存空间
返回值

注意:

  • 传入指向堆内存空间的首地址,释放的是整个块,而不是指向该块的指针类型的大小.
  • 释放完后一般使p=NULL;
(5)使用堆空间的注意事项

①申请不一定成功,使用前判断
②用完后空间要释放,只能释放申请时的初地址p(前4个字节存放开辟内存长度等信息)
③指针要置NULL
交还malloc申请空间的使用权给系统

4.-mize(p)可以取得动态内存长度(malloc.h)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Story51314

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值