[架构之路-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章 待续

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文火冰糖的硅基工坊

你的鼓励是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值