程序运行与内存

news/2024/11/26 4:22:08/

1.计算机程序运行的目的

程序的目的就是为了运行,程序运行是为了得到一定的结果,程序其实就是在计算数据。
计算机程序 = 代码 + 数据
代码 + 数据(经过运行后) = 结果
另一种理解就是,代码就是动作,就是加工数据的动作,数据就是数字,就是被代码加工的东西。
所以程序运行的目的可得出为:结果、过程。

拿函数类比一下,形参就是待加工的数据,当然还需要一些局部变量(临时数据),函数本体就是代码,函数返回值就是运行结果,函数的执行就是过程。函数的不同,有的函数重在过程,有的函数重在结果,有的函数都看重,具体环境具体分析。

2.计算机程序运行的过程

计算机程序运行的过程就是很多函数相继运行的过程,程序是由很多函数组成的,程序的本质就是函数,函数的本质就是加工数据的动作。

3.冯诺依曼结构和哈佛结构。

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

4.动态内存DRAM和静态内存SRAM

SRAM(Static Random-Access Memory),它是一种具有静止读取存取功能的内存,不需要刷新电路即能保存它内部存存储的数据。不像DRAM内存那样需要刷新电路,每隔一段时间,固定要对DRAM刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积

DRAM(Dynamic Random-Access Memory),即动态随机存储器最为常见的系统内存。DRAM 只能将数据保持很短的时间。为了保持数据,DRAM使用电容存储,所以 必须隔一段时间刷新(refresh)一次,如果存储单元没有被刷新,存储的信息就会丢失。动态RAM的工作原理 动态RAM也是由许多基本存储元按照行和列来组成的

5.为什么需要内存

内存是用来存储可变数据的,数据在程序中表现为全局变量、局部变量等(gcc中,其实常量也是存储在内存中的)(大部分单片机中,常量是存储在flash中的,也就是代码段)对我们写程序来说非常重要,对程序运行更是本质相关。
所以内存对程序来说就是本质需求,

6.如何管理内存:

从操作系统讲:操作系统掌握所有的硬件内存,因为内存很大,所以操作系统把内存分成1个1个的页面,(其实就是一块,一般是4KB),然后以页面为单位管理,页面内用更细小的方式来以字节为单位管理。操作系统内存管理的原理非常麻烦、非常复杂、非常不人性化。操作系统给我们提供了内存管理的一些接口,我们只需要API即可管理内存。譬如在C语言中使用malloc free这些接口来管理内存。
没有操作系统时:(实际就是裸机程序),程序需要直接操作内存,编程者需要自己计算内存的使用和安排。

从语言角度来讲:不同语言提供了不同的操作内存接口。
汇编:没有如何内存管理,内存管理全靠程序员自己,汇编使用内存地址直接(0xd1111100)
C语言:C语言中编译器帮我们管理直接内存地址,我们通过编译器提供的变量名来访问内存的,操作系统下需要大块内存,可以通过API(malloc free)来访问系统内存。裸机需要大块内存需要自己来定义 数组等在解决。
C++:C++语言内存的使用进一步封装。我们用new来创建对象(其实就是为对象分配内存),然后使用delete来删除对象释放内存,如果new了一个对象,不用delete释放,内存泄漏。
Java/C#等语言:这些语言不直接操作内存,而是通过虚拟机来操作内存。这样虚拟机作为我们程序员的代理,来帮我们处理内存的释放工作。如果我的程序申请了内存,使用完成后忘记释放,则虚拟机会帮我释放掉这些内存。


http://www.ppmy.cn/news/434309.html

相关文章

ios运行内存

1.Free / 自由 很好理解,就是没有占用的空闲内存 2.Wired / 固定 由系统创建用于存储关键信息(例如内核数据)的部分。在大多数情况下,位于该状态的信息是处于冻结状态的,既不会被转写入硬盘,也不会被其他…

C/C++程序运行的五种内存分区

1.简介 在C/C程序运行时,所使用的内存分为代码区(Code)、堆区(Heap)、栈区(Stack)、全局/静态存储区(static)、常量存储区(const) 五个分区。注意此处的堆和栈并不是指数据结构 2.详解 (1)代码区 这个区域存放程序包含的所有函数体的二进制…

C语言内存

1.程序中内存从哪里来 1.1、程序执行需要内存支持 对程序来说,内存就是程序的立足之地(程序是被放在内存中运行的);程序运行时需要内存来存储一些临时变量。 1.2、内存管理最终是由操作系统完成的 (1)内存本身在物理上是一个硬件…

程序载入内存,程序运行

如果你的电脑上安装了QQ,你希望和好友聊天,会双击QQ图标,打开QQ软件,输入账号和密码,然后登录就可以了。 那么,QQ是怎么运行起来的呢? 首先,有一点你要明确,你安装的QQ…

程序运行时内存如何分配的

之前有很多人将 Java 的内存分为堆内存(heap)和栈内存(Stack),这种划分方式在一定程度上体现了这两块区域是 Java 工程师最关注的内存区域。但是其实这种划分方式并不完全准确。 Java 的内存区域划分实际上远比这复杂…

iPhone上的CPU架构,核数以及运行内存

机型CPU架构CPU名CPU位数CPU核数运行内存iPhone 5ARMv7sA632bit双核1GiPhone 5cARMV7sA632bit双核1GiPhone 5sARM64A764bit双核1GiPhone 6ARM64A864bit双核1GiPhone 6sARM64A964bit双核2GiPhone 7ARM64A1064bit四核2GiPhone 7sARM64A1064bit四核3GiPhone 8ARM64A1164bit六核2Gi…

程序运行时内存的各种数据段

文章目录 1.bss段2.data段3.rodata段4.text段5.stack段6.heap段 1.bss段 该段用来存放没有被初始化或初始化为0的全局变量,因为是全局变量,所以在程序运行的整个生命周期内都存在于内存中。 有趣的是这个段中的变量只占用程序运行时的内存空间&#xf…

6S模型运行 1

6S模型准备 最近要用6S模型进行大气模拟,以此记录下整个过程 安装 参考博客-6SV2.1模型编译心得(WINDOWS7) 原文链接:https://blog.csdn.net/u010472858/article/details/84345773 1.WINDOWS系统需要下载UNIX工具,…