嵌入式Linux与物联网软件开发——C语言内核深度解析 - (EPUB全文下载)
文件大小:0.28 mb。
文件格式:epub 格式。
书籍内容:
嵌入式Linux与物联网软件开发——C语言内核深度解析
第1章 C语言与内存
第2章 C语言位操作
第3章 指针才是C语言的精髓
第4章 C语言复杂表达式与指针高级应用
第5章 数组&字符串&结构体&共用体&枚举
第6章 C语言的预处理、函数和函数库
第7章 存储类&作用域&生命周期&链接属性
第8章 C语言关键细节讨论
第9章 链表&状态机&多线程
第10章 程序员和编译器的暧昧
附录 答案
欢迎来到异步社区!
第1章 C语言与内存
1.1 引言
其实我们不知道的是,早期的计算机是没有内存的,但是如今我们去买电脑时,都会十分关心电脑内存的各种参数,因此可以看出内存对于电脑性能的重要性。那么为什么需要内存呢?换句话说,内存与计算机以及程序之间的关系又是什么呢?本章将会以内存为中心,探讨许多与内存相关的概念和话题,这些概念是学好后续C语言知识不可缺少的基础,因此希望读者认真对待本章节的内容。
1.2 计算机程序运行的目的
1.2.1 什么是程序
程序是什么?最为直观的表达就是:程序=数据+算法。对于计算机来说,一个程序就是一堆代码加一堆数据。代码告诉CPU如何加工数据,而数据则是被加工的对象。例如我们写一个加法程序,对于计算机来说,代码告诉CPU是执行加法,数据就是加数和被加数。当然,我们也可以将加法运算的过程封装成一个函数,即便不封装成一个子函数,那它也是在主函数(main)里。C语言程序就是由一个个函数组合而成,这也是C语言模块化的一个强烈表现。
1.2.2 计算机运行程序的目的
既然我们已经知道了程序是什么,那么我们接下来就可以来探讨计算机运行程序的目的是什么了。其实运行程序的目的无外乎如下几个:要么是得出一个确定的运行结果;要么是关注运行的过程;要么二者皆有。得到一个结果还是可以理解的,但说程序运行只是为了过程可能就不太好理解了,设想那些没有返回值的函数不都是在注重过程,它们并不会返回一个结果。
函数程序的形参就是待加工的数据,当然函数内还需要一些临时数据(局部变量),函数本体就是代码(程序的组成:数据+算法),函数的返回值就是结果,函数体的执行就是过程,所以说函数的运行目的是:结果、过程或者二者全有。
· 例子1
int add(int a, int b)
{
return a + b;
}
// 这个函数的执行就是为了得到结果
· 例子2
void add(int a, int b)
{
int c;
c = a + b;
printf("c = %d\n", c);
}
// 这个函数的执行重在过程(重在过程中的printf),不需要返回值
· 例子3
int add(int a, int b)
{
int c;
c = a + b;
printf("c = %d\n", c);
return c;
} // 这个函数既重结果又重过程
通过上面的例子,大家应该有了新的认识,理解了程序的组成和程序运行的目的。
1.2.3 静态内存SRAM和动态内存DRAM
上一节我们探讨了什么是程序,以及运行程序的目的是什么。这一节我们准备谈一谈存储和运行程序的硬件—内存。内存大致分为静态内存(Static RAM,SRAM)和动态内存(Dynamic RAM,DRAM)。
SRAM的性能非常高,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,如CPU的一级缓冲、二级缓冲;而DRAM的速度要比SRAM慢,但是DRAM的价格比SRAM便宜很多。DRAM又有好多代,譬如最早的SDRAM,后来的DDR1、DDR2……,LPDDR,我们这里介绍其中一种DDR。
DDR(Doubk Date Rate)是一种改进型的RAM,它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了,并且它有着很好的成本优势,因此DDR是目前电脑中用得最多的内存。目前在很多高端的显卡上,大都配备了高速DDR,用于提高带宽,以求大幅度提高对3D加速卡像素的渲染能力。
DDR内存
不管是SRAM还是DRAM,对于编程者来说,并不需要详细了解其内部原理,只需要使用即可。实际上内存就是存储代码和数据的,这就是内存的本质。那么内存中到底存储的是什么东西呢?数据和代码以什么样的方式存储在内存中呢?我们接下来就会讲到。
1.2.4 冯·诺伊曼结构和哈佛结构
按数据(全局变量、局部变量)和代码(函数)的存储方式的不同,可以分为冯·诺伊曼结构(又称作普林斯顿体系结构)和哈佛结构。
冯·诺伊曼结构:数据和代码放在一起。
哈佛结构:数据和代码分开存放。
冯·诺伊曼结构
哈佛结构
在冯·诺伊曼结构中,程序中的代码和数据统一存储在同一个存储器中,而且数据和代码共用一条传输总线。由于指令和数据都是二进制码,指令和操作数的地址又密切相关,因此当初选择这种结构是自然的。如ARM公司的ARM7、MIPS公司的MIPS处理器,都采用了冯·诺伊曼结构。但是这种指令和数据共享同一总线的结构,使得信息流的传输成为限制计算机性能的瓶颈,影响了数据处理速度的提高。
与冯·诺伊曼结构相反,哈佛结构是一种将指令和数据分开存储的结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,然后执行操作并读取下一条指令。
在指令和数据分开存储的哈佛结构中,指令和数据的存取可以同时进行,可以使指令和数据有不同的数据宽度,并且在执行时还可以预先读取下一条指令,因此哈佛结构的微处 ............
以上为书籍内容预览,如需阅读全文内容请下载EPUB源文件,祝您阅读愉快。
书云 Open E-Library » 嵌入式Linux与物联网软件开发——C语言内核深度解析 - (EPUB全文下载)