嵌入式C语言之数组$字符串$结构体$枚举进阶知识


程序与内存:
    内存用来存放程序运行之中的一些临时变量,是程序运行的地方。
    内存的管理由操作系统统一完成。程序根据实际情况获取内存,使用内存,释放内存。

在64位操作系统内,指针所占的内存为8个字节,而在32位操作系统中,指针占4个字节。
    
三种内存来源:栈(stack),堆(heap),数据区(.data)

 

栈的详解

(先进后出)  (小块内部内存,且内存大小固定)
    1.运行时自动分配,自动回收,栈可以自动管理,不需要程序员手工干预。
    2.反复使用:栈内存就是内存中是一个固定的空间区域,     
    3.由于栈的反复使用,导致栈内存是脏内存,每次使用完程序不会去清理,因此二次分配使用时保留的是原本的值。示例体现:定义局部变量时局部变量的值是随机的,所以定义局部变量的时候必须初始化。
    4.临时性:函数不能返回栈变量的指针(局部变量的指针)。因为这个函数执行完返回后这个局部变量已经不在了,但是由于局部变量是分配在栈上面的,栈内的内存仍然可以使用,但是此时的内存地址和之前的局部变量已经没有联系了。

堆内存:
    1.由堆管理器(操作系统的一个模块)管理,堆的内存分配方式灵活,按需分配。各进程手动按需申请,使用完手动释放。手工的意思是写代码去申请 malloc 释放 free.
    2.脏内存:使用者使用完释放前不会清除,因此也是脏的。
    3.临时性:仅在malloc和free之间属于本内存,可以访问。
    
    注:malloc 返回的是一个 void *类型的指针(void早期被翻译为空型,表示万能类型),实质上 malloc返回的是堆管理器分配给程序此次申请的那段内存空间的首地址(以数字形式表示,这个数字代表内存地址)。malloc为程序申请的内存空间可以存放各种类型的变量(malloc为程序申请内存空间时,不关注这段内存是用来存储什么类型的变量,由程序自己决定)
    
    使用的格式:1.申请和绑定  int(char float....)*p int(*)malloc(内存空间大小)
                2.检验是否成功,if(p==NULL)                               //检验是否成功
                  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值