内存
(1)程序运行的目的
程序的目的就是为了去运行,程序运行是为了得到一定的结果,计算机就是为了计算,所有的计算机就是为了计算,计算数据。计算机程序 = 代码 + 数据。
宏观理解:代码就是动作,就是加工数据的动作,数据就是数字,就是代码加工的东西。
代码 + 数据 = 结果
用函数来类比:函数的形参就是代加工的数据;函数本体是代码,函数的返回值就是结果,函数体的执行过程的过程。
int add(int a,int b)
{
return a+b;
}//这个函数即看重过程也看重结果
void add(int a,int b)
{
int c;
c = a + b;
printf("c= %d.\n",c);
}//这个函数只看重过程
(2)计算机程序运行过程
计算机程序的运行过程,其实就是程序很多个函数相继运行的过程。程序是由很多函数组成的,程序的本质就是函数,函数的本质就是加工数据的动作
(3)冯洛伊曼结构和哈弗结构
冯洛伊曼结构:数据和代码放在一起
哈弗结构:数据和代码分开存放
代码:函数就是代码
数据:全局变量和局部变量
在SPV210中运行的linux系统上,运行程序时:这时候所有的应用程序的代码和数据都在DRAM,所以这个结果就是冯洛伊曼结构;在单片机中,我们吧程序代码烧写到Flash(内置的NorFlash)中,然后程序在Flash中原地运行,程序中涉及的数据(全局变量,局部变量)不能放在Flash中,必须放在RAM(静态的SRAM)中,这个结构称为哈佛结构。
(4)动态内存DRAM和静态内存SRAM
动态随机存取存储器(Dynamic Random Access Memory,DRAM)
静态随机存取存储器(Static Random-Access Memory,SRAM)
(5)为什么需要内存
内存时用来存储可变数据的,数据在程序中表现为全局变量,局部变量等(在gcc中,其实常量也是存储在内存中)(大部分单片机中,常量时存储在Flash中,也就是代码段)
我们了解的很多编程的关键就是为了内存,譬如说数据结构(数据结构是研究数据如何组织,数据是放在内存中)和算法(为了更优秀的方式来加工数据,既然数据有关就离不开内存)。
(6)如何管理内存
对于计算机来说:内存容量越大则可能性越大,所以大家都希望自己的电脑内存越大。我们写程序如何管理内存就成了很大的问题。如果管理不好,可能程序运行就会消耗大量的内存,这样迟早内存会不够,当没有内存时,程序就会崩溃。所以内存对程序来说是一种资源,所以管理内存对程序来说是一个重要的技术和话题。
先从操作系统来说&#