C语言高级篇 - 5.内存

本文介绍了C语言中内存管理的概念,包括冯诺依曼结构与哈佛结构、动态内存DRAM和静态内存SRAM的区别,以及内存与数据类型的关系。强调了在不同场景下选择省内存或运行效率的重要性。讨论了结构体的用途,以及如何通过结构体内嵌指针实现面向对象。此外,还详细讲解了栈和堆的管理,包括栈的自动分配和回收,以及堆的申请与释放。最后,提到了复杂数据结构如链表、哈希表、二叉树在实际问题中的应用和选择数据结构的重要性。
摘要由CSDN通过智能技术生成

1、冯诺依曼结构和哈佛结构

     (1)冯诺依曼结构是:数据和代码放在一起。

     (2)哈佛结构是:数据和代码分开存在。

     (3)什么是代码:函数

     (4)什么是数据:全局变量、局部变量

     (5)在S5PV210中运行的linux系统上,运行应用程序时:这时候所有的应用程序的代码和数据都在DRAM,所以这种结构就是冯诺依曼结构;在单片机中,我们把程序代码烧写到Flash(NorFlash)中,然后程序在Flash中原地运行,程序中所涉及到的数据(全局变量、局部变量)不能放在Flash中,必须放在RAM(SRAM)中。这种就叫哈佛结构。

 

2、动态内存DRAM和静态内存SRAM

 

3、内存和数据类型的关系

        C语言中的基本数据类型有:char short int long float double 

        int 整形(整数类型,这个整就体现在它和CPU本身的数据位宽是一样的)譬如32位的CPU,整形就是32位,int就是32位。

        数据类型和内存的关系就在于:

        数据类型是用来定义变量的,而这些变量需要存储、运算在内存中。所以数据类型必须和内存相匹配才能获得最好的性能,否则可能不工作或者效率低下。

        在32位系统中定义变量最好用int,因为这样效率高。原因就在于32位的系统本身配合内存等也是32位,这样的硬件配置天生适合定义32位的int类型变量,效率最高。也能定义8位的char类型变量或者16位的short类型变量,但是实际上访问效率不高。

        在很多32位环境下,我们实际定义bool类型变量(实际只需要1个bit就够了)都是用int来实现bool的。也就是说我们定义一个bool b1;时,编译器实际帮我们分配了32位的内存来存储这个bool变量b1。编译器这么做实际上浪费了31位的内存,但是好处是效率高。

        问题:实际编程时要以省内存为大还是要以运行效率为重?答案是不定的,看具体情况。很多年前内存很贵机器上内存都很少,那时候写代码以省内存为主。现在随着半导体技术的发展内存变得很便宜了,现在的机器都是高配,不在乎省一点内存,而效率和用户体验变成了关键。所以现在写程序大部分都是以效率为重。

 

4、结构体

        结构体发明出来就是为了解决数组的第一个缺陷:数组中所有元素类型必须相同

        我们要管理3个学生的年龄(int类型),怎么办?

        第一种解法:用数组        int ages[3];

        第二种解法:用结构体    

    struct ag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值