知识分享|如何理解程序的内部结构
发布时间:2023-07-28 14:00:11
如何理解程序的内部结构
在很多时候,程序需要一些辅助的工具,需要一些平台支持,使得一个静态的、死的软件程序变成活动的、可以运行起来的程序,这就是常说的进程。在系统程序中常常会碰到一个可以运行其他程序的程序,接下来我们将深入讨论,如何理解程序的内部结构。
一、为什么要了解程序的内部结构
对于嵌人式软件程序员而言,深入掌握程序的内部结构,对于程序设计是非常重要的。
由于所开发的程序需要“烧”到 Flash,在运行时需要搬迁到内存,甚至在运行的过程中需要移动位置、被压缩、解压缩以及把一个静态存放在磁盘的程序加载到内存当中,并分别将它们的代码段,数据段复制到合适的位置。
必要的时候还可能要与一个动态库相连接,从而解析运行时才能确定的一些符号地址。由此看来,深人了解程序,有助于对所设计的系统更精确地控制。
那么,程序是什么?一个程序由哪几部分组成?这个看似极其简单的问题,要想真正把它弄清楚,却不那么简单。
二、程序=代码+数据
首先,无论是应用程序,还是系统程序,它们都是程序,也就是说,它们都是一些指令代码与指令所处理的数据的集合,即
程序=(代码+数据)
代码是按照程序员的设计意图设计出来供 CPU 执行的指令序列。而数据可以看成是代码的处理对象、工作状态等的集合。所以一个程序由最基本的代码段和数据段组成。
代码与数据在机器中都表现为0,1的二进制序列,在系统程序中代码和数据并不严格区分,因为作为代码的机器表示,本身就是数据序列。
所有的代码和数据在初始时都存于 Flash或是别的存储设备中,例如:EEPROM,CF卡,SD卡,或是移动硬盘。代码都要被复制到内存或者直接读到 CPU的指令队列之后才能运行。
三、堆栈段
一个程序除了代码段和数据段之外为了储存临时数据变量(包括返回指针以及程序状态),一个完整的程序还必须有堆栈段。代码段、数据段和堆栈段是一个程序的基本组成部分。
实际过程中,数据段有许多的变种,例如常量数据,未初始化数据,临时变量数据,动态申请数据等,因而出现了一些特殊的数据段。这些数据段有些是在程序生成的过程中静态确立的,而有一些却是程序在执行过程中静态或动态分配并初始化的物理空间这就是常见的 BSS段,以及堆(HEAP)。
之所以有这些变种有2个主要意图:
01-让系统中的其他程序实体共享有限的物理内存资源。
02-节省可执行程序在磁盘(或别的存储体)中的静态存储空间即目标程序的大小。
- 上一篇:嵌入式实时操作系统
- 下一篇:干货分享|关于Linux与和Windows的区别