C语言的内存分配{静态内存&动态内存&堆栈}_c语言内存

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取


一、栈(操作系统)

存局部变量、函数,调用函数时会开辟栈区,函数结束时就自动回收,遵循后进先出的原则,从高地址向低地址增长。
静态内存分配:
            静态内存是程序编译执行后系统自动分配,由系统自动释放,特点:不持久。
使用静态内存分配的变量有:全局变量&静态变量
        全局变量是直接在程序中定义而非在函数(包括main函数)中定义的变量。
        静态变量在定义时使用static修饰,静态变量又分为全局静态变量和局部静态变量。

二、堆(操作系统)

malloc、realloc、calloc等开辟的内存就在堆,从低地址向高地址增长,由程序员分配和释放,系统不自动回收,所以一定要记得申请了就要释放,以免溢出。

**动态内存分配:**动态内存是开发者手动分配的,是堆分配的。特点:持久。

在C语言中,全局变量分配在内存中的静态存储区,非静态的局部变量【动态局部变量】(包括形参)是分配在内存的动态存储区,该存储区被称为栈。除此之外,c语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要是随时释放。这些数据临时存在一个特别的自由存储区,称为堆区

系统提供了四个库函数来实现内存的动态分配:

(1)malloc(size) 在内存的动态存储区中分配一个长度为size的连续空间。

(2)calloc(n,size) 在内存的动态存储区中分配n个长度为size的连续空间。

(3)free§ 释放指针变量p做指向的动态空间。

(4)realloc(p,size) 将指针变量p指向的动态空间大小改变为size。

注意:

(1)避免分配大量的小内存块。分配堆上的内存有一些系统开销,所以分配许多小的内存块比分配几个大内存块的 系统开销大

(2)仅在需要时分配内存。只要使用完堆上的内存块,就需要及时释放它(如果使用动态分配内存,需要遵守原则: 谁分配,谁释放), 否则可能出现内存泄漏**。**

1. 全局变量、静态全局变量**&动态全局变量、静态局部变量&**局部变量

按存储区域分:

全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区

按作用域分:

全局变量在整个工程文件内都有效;静态全局变量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,并且程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。

**局部变量(Local Variable):**定义在函数体内部的变量,作用域仅限于函数体内部。离开函数体就会无效。再调用就是出错。

**全局变量(Global Variable):**所有的函数外部定义的变量,它的作用域是整个程序,也就是所有的源文件,包括.c和.h文件。

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 静态全局变量与动态全局变量的区别在于动态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,动态【非静态】全局变量在各个源文件中都是有效的。  而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。 由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。


三、全局(静态)区

通常是用于那些在编译期间就能确定存储大小的变量的存储区,但它用于的是在整个程序运行期间都可见的全局变量和静态变量。全局区有 .bss段 和 .data段组成,可读可写。

**未初始化数据段(bss段):**存放未初始化的全局变量和static修饰的未初始化的变量。

.bss段:

未初始化的全局变量和未初始化的静态变量存放在.bss段。

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

籍、讲解视频,并且后续会持续更新**

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值