文章目录
1 转换环境与执行环境1.1 转换环境与执行环境的概念1.2 为什么要区分转换环境和执行环境2 宿主环境和独立环境2.1 宿主环境2.2 独立环境3 宿主实现、独立实现3.1 宿主实现3.2 独立实现1 转换环境与执行环境
1.1 转换环境与执行环境的概念
转换环境:程序转换时所处的环境(程序转换:指的是从源文件到可执行文件的转换,就是我们常说的编译),通俗点就是指程序转换时所用的计算机。
注意:计算机包括了 PC、工作站、服务器、手机、平板电脑、笔记本、单片机等等。
执行环境:程序执行时所处的环境,通俗点就是指程序执行时所用的计算机。
转换环境和执行环境可能是相同的,比如:
对于正在学习阶段的我们来说,肯定是在同一台PC上完成的对程序的转换和执行。这时,转换环境和执行环境就是相同的,它们都是我们所使用的这台PC。
大多数时候,转换环境和执行环境并不相同,比如:
开发一款商业软件,我们需要在自己的PC上完成转换工作,而程序的执行却是在用户的PC上。这时,转换环境和执行环境就可能是不相同的。转换环境就是你所使用的PC、执行环境就是用户所使用的PC。
1.2 为什么要区分转换环境和执行环境
不同的环境具有不同的软硬件配置(不同的CPU架构、不同的操作系统、不同的字符集 等等),比如:手机的处理器可能是ARM架构、PC的处理器可能是X86架构。
如果我们用手机编写一个在手机上运行的软件是很麻烦的,因为,手机屏幕太小了,操作起来非常的不方便。所以,我们通常是在PC上建立一个手机仿真环境,然后在PC上编写和转换要在手机上执行的程序。这时,这个程序的转换环境就是PC,执行环境就是手机。
很显然,如果我们根据转换环境来编写和转换程序的话,由于转换环境和执行环境的CPU架构、操作系统等等都是不同的。那么,这个程序只能运行在PC上,而不能运行在手机上,这明显违背了我们的预期。所以呢,在写程序前,我们需要考虑它的执行环境到底是怎么样的,我们只能根据执行环境来编写和转换程序,这样才能达到我们的预期。这就是我们区分转换环境和执行环境的原因。
2 宿主环境和独立环境
执行环境分为两种:分别是宿主环境和独立环境。
2.1 宿主环境
程序的执行需要依靠操作系统、或者其它软件的支撑。那么,这个程序的执行环境就是宿主环境。
比如:PC上的程序,它的执行环境就是宿主环境(操作系统内核除外)。
2.2 独立环境
程序的执行不需要依靠操作系统、或者其它软件的支撑。那么,这个程序的执行环境就是独立环境。
比如:单片机上的程序,它的执行环境就是独立环境。
一个程序的执行环境到底是宿主环境、还是独立环境,是由程序是否可以独立运行来决定的。
3 宿主实现、独立实现
3.1 宿主实现
宿主实现:转换(执行环境为宿主环境的程序)的实现,比如:gcc。
宿主实现可以接受任何严格依从C标准的C程序。
3.2 独立实现
独立实现:转换(执行环境为独立环境的程序)的实现。比如:keil --> 类似于CodeBlocks的集成开发环境 --> 专门用来为单片机开发软件的 --> 它内置了C实现。
独立实现可以接受任何严格依从C标准的C程序,但程序不能使用绝大多数的库,只能使用以下头文件中的内容:
<float.h> <iso646.h> <limits.h> <stdalign.h> <stdarg.h>
<stdbool.h> <stddef.h> <stdint.h> <stdnoreturn.h>
为什么呢?
因为(执行环境为独立环境的程序),它的运行不依靠操作系统。而标准库中的很多库函数都依赖于操作系统,所以程序不能使用绝大多数的库。