[架构之路-24]:目标系统 - 系统软件 - C语言的结构与程序的工作原理 - 程序控制函数调用栈函数调用性能优化

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[架构之路-24]:目标系统 - 系统软件 - C语言的结构与程序的工作原理 - 程序控制函数调用栈函数调用性能优化相关的知识,希望对你有一定的参考价值。

目录

 前言:

第1章 结构化程序与分层编程系统

1.1 计算机软硬件模型

1.2 程序的经典框架:算法+数据结构

1.3 程序的结构化框架

1.4 程序的层次模型

1.5 程序设计的层次模型

第2章 C语言概述

2.1 C语言本质

2.2 C语言关键字

2.3 C语言在编程语言的中的位置

第3章 C语言结构化代码组织

第4章 C语言结构化数据表示

第5章 C语言结构化数据运算

第6章 C语言结构化程序控制

6.1 CPU控制

6.2 无条件转移

6.3 条件分支

6.4 条件循环

6.5 子程序跳转

第7章 C语言函数调用与堆栈工作原理

7.1 什么是函数调用?

7.2 函数调用“栈”

7.3 主函数

7.4 函数调用前

7.5 函数调用时

7.6 进入子函数

7.7 子函数的执行

7.8 子函数返回前

7.9 子函数返回时

7.10 子函数返回后

 7.11 子函数调用完成

7.12 函数返回值的4种传递方式

第8章 函数调用的性能优化

8.1 函数调用汇总

8.2 优化1:代码取消局部变量对目标数据的中转

8.2 优化2:编译器取消匿名返回变量-1

8.3 优化3:编译器取消匿名返回变量-2

8.4 优化4:代码使用指针传递

8.5 优化5:代码使用指针传递(堆数据) 

第9章 待续


 前言:

大多数系统软件(包括bootloader和操作系统)的99%代码,都是用C语言编写的,故在介绍系统软件之前,先阐述一下C语言的结构与工作原理,通过C语言的工作原理也可以理解CPU的工作原理。

第1章 结构化程序与分层编程系统

1.1 计算机软硬件模型

1.2 程序的经典框架:算法+数据结构

数据结构(structure)是:计算机存储、组织数据的方式。

算法(Algorithm)是:指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

1.3 程序的结构化框架

1.结构化代码组织

  • 内存结构、代码结构

2.结构化数据表示:数据结构、数据定义

  • 基本数据类型、结构化数据、指针数据类型

3.结构化数据运算:算法

  • 运算符、函数定义

4.结构化程序控制

  • CPU控制、顺序语句、条件分支、跳转循环、函数调用

1.4 程序的层次模型

1.5 程序设计的层次模型

设计一个程序或软件系统,自底向上的方法有:

(1)二进制指令系统

(2)低级编程语言:汇编

(3)高级编程语言:C/C++/Python

(4)标准库:第三方提供的常见的功能

(5)常见的设计模式

(6)特定业务应用的程序框架

(7)特定业务的应用程序

(8)UML图形化语言描述

每个层次,都包含程序的两个重要方面:算法+数据结构

第2章 C语言概述

2.1 C语言本质

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译

C语言是一门面向过程计算机编程语言,与C++、C#、Java面向对象编程语言有所不同。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%-20%。因此,C语言可以编写系统软件

当前阶段,在编程领域中,C语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是C语言应用的两大领域。同时,C语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显著。

2.2 C语言关键字

2.3 C语言在编程语言的中的位置

第3章 C语言结构化代码组织

第4章 C语言结构化数据表示

第5章 C语言结构化数据运算

第6章 C语言结构化程序控制

6.1 CPU控制

6.2 无条件转移

6.3 条件分支

 

6.4 条件循环

6.5 子程序跳转

第7章 C语言函数调用与堆栈工作原理

7.1 什么是函数调用?

 

7.2 函数调用“栈”

“栈”是计算机中一个非常奇妙的机制,通过栈,可以利用有限的内存空间,为无限的函数调用的局部变量共享相同的地址空间。

“栈”与饭店的“客座”相似。用有限的座位(栈内存),为无限的客人(函数的局部变量)服务。

 

7.3 主函数

7.4 函数调用前

7.5 函数调用时

备注:

(1)形参被调用函数局部变量

(2)形参的内存空间在“栈”中

(3)形参的内存空间是主调函数通过汇编指令push分配的。

(4)形参的初始值,是通过主调函数通过汇编指令mov完成的。

7.6 进入子函数

7.7 子函数的执行

7.8 子函数返回前

7.9 子函数返回时

7.10 子函数返回后

 7.11 子函数调用完成

7.12 函数返回值的4种传递方式

第8章 函数调用的性能优化

8.1 函数调用汇总

 

8.2 优化1:代码取消局部变量对目标数据的中转

 

8.2 优化2:编译器取消匿名返回变量-1

8.3 优化3:编译器取消匿名返回变量-2

8.4 优化4:代码使用指针传递

8.5 优化5代码使用指针传递(堆数据) 

第9章 待续

 

 

以上是关于[架构之路-24]:目标系统 - 系统软件 - C语言的结构与程序的工作原理 - 程序控制函数调用栈函数调用性能优化的主要内容,如果未能解决你的问题,请参考以下文章

[架构之路-50]:目标系统 - 系统软件 - Linux下的网络通信-6-PONEPONGPON

[架构之路-59]:目标系统 - 平台软件 - 基础中间件 - POSIX(可移植操作系统接口)与标准库函数libc

[架构之路-35]:目标系统 - 系统软件 - Linux OS内核模块与内核设备驱动程序,一切皆文件,Linux虚拟文件系统与统一设备模型

[架构之路-11]:目标系统 - 架构 - 嵌入式系统软件+硬件的基本通用架构

[架构之路-56]:目标系统 - 平台软件 - 总体架构概述

[架构之路-28]:目标系统 - 系统软件 - Linux OS内核功能架构图解内核构建内核启动流程