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

news2025/7/11 18:14:03

目录

 前言:

第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章 待续

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/406155.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js算法 字母大小写转换

题目:输入字符串将大写转换成小写,小写转换成大写? js字母大小写转换方法: 1、转换成大写:toUpperCase() 2、转换成小写:toLowerCase()方法一:把输入的字符串转成数组用split(&…

chatgpt 无法登录报错Access denied、OpenAl‘s services are not available in yourcountry. (error=unsupported )

一、主要解决有账号无法登录问题,共包含两种情况。 1、Oops! OpenAls services are not available in yourcountry.(errorunsupported country) 2、Access denied You do not have access to chat.openai.com. The site owner may have set restrictions that p…

Linux命令之nano命令

一、nano命令简介 nano是一个小型、免费、友好的编辑器,旨在取代非免费Pine包中的默认编辑器Pico。nano不仅复制了Pico的外观,还实现了Pico中一些缺失(或默认禁用)的功能,例如“搜索和替换”和“转到行号和列号”。nan…

Element Plus的el-tree-select组件,懒加载 + 数据回显

目录一、背景说明二、使用1. dom2.methods三、回显一、背景说明 技术:Vue3 Element Plus需求:在选择组织机构时以树结构下拉展示。用到组件:TreeSelect 树形选择组件(el-tree-select) 官网文档地址: ht…

Vue如何启动项目

文章目录 文章目录 前言 一、首先了解vue-cli脚手架 二、安装脚手架 三、启动项目 总结 前言 废话就不多说了,直接进入正题 一、首先了解vue-cli脚手架 vue-cli 是一个基于 Vue.js 进行快速开发的完整系统 vue-cli是 基于 webpack 构建 vue 前端模块工程环境webpa…

Vue.js介绍

目录 一、 Vue.js是什么 二、 Vue.js优点 三、 前提条件 四、 安装Vue 1. 直接用 script 标签 引入 2. 命令行工具 (CLI) 3. 其他方法或细节应用 五、声明式渲染 六、 理解什么是MVVM MVVM模式的组成部分 MVVM优点 一、 Vue.js是什么 Vue.js (vue读音 /vjuː/&am…

【CSS扩展】VUE如何使用或修改element plus中自带的CSS全局变量来定义样式

目录 一、CSS声明全局变量 二、使用el plus 和 el ui的自带样式 1、element plus—— var.scss位置 2、element ui—— var.scss位置 三、修改el plus 和 el ui中的自定义样式变量(方法一致) 本萌新最近在写网页时使用到了element plus中自带的CSS全…

Vue中如何解决跨域问题

跨域 跨域报错是前端开发中非常经典的一个错误,报错如下 Access to XMLHttpRequest at ...... from origin ...... has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 跨域错误源自于浏览器的同源…

《中秋佳节倍思亲》——2022年这场中秋

中秋佳夜,圆的是月,满的是情,但一人终究扛下离愁 作为一个杭漂者,虽不及北漂般艰难困苦,但也举步维艰啊! 或许,这对我而言,正是一个别样的中秋,也正是一个值得我一生纪念…

多端统一开发解决方案---Taro

Taro 一套代码,多端运行,释放双手的摸鱼神器 文章目录Taro 一套代码,多端运行,释放双手的摸鱼神器1. 简介2. 准备工作2.1 安装及使用2.1.1 开发者工具2.1.2 tarojs2.1安装tarojs工具3. Taro 使用4.限制5.路由跳转汇总6.注意事项7.…

vue3:安装配置sass

目录 前言: 1. 安装sass 2. 新建style目录,存放scss文件 3. main.ts 4. vite.config.ts 5. Test.vue 前言: 对于前端开发人员来说,css预处理的语言已经是家常便饭了,如sass,less等等,那么…

深度学习实战 1 YOLOv5结合BiFPN

目录 1. BiFPN论文简介 2. 在Common.py中添加定义模块(Concat) 3. 将类名加入进去,修改yolo.py 4. 修改train.py 5. 修改配置文件yolov5.yaml 1. BiFPN论文简介 论文《EfficientDet: Scalable and Efficient Object Detection》地址:https://arxiv…

微信小程序云开发的具体使用教程

小程序云开发介绍 云开发官方文档 一个小程序在开发时,除了考虑界面功能逻辑外,还需要后端的数据支持。而为了获得后端的数据支持,开发者需要提前考虑服务器、存储和数据库等需求,并且会花费时间精力在部署应用、依赖上。因此官方…

【JavaScript 逆向】网易易盾滑块逆向分析

声明本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除!案例目标验证码:aHR0cHM6Ly9kdW4uMTYzLmNvbS90cmlhbC9qaWdzYXc以上均做了脱敏处理,Base64 编码及解码方式:…

MongoDB数据库性能监控详解

目录一、MongoDB启动超慢1、启动日常卡住,根本不用为了截屏而快速操作,MongoDB启动真的超级慢~~2、启动MongoDB配置服务器,间歇性失败。3、查看MongoDB日志,分析“MongoDB启动慢”的原因。4、耗时“一小时”,MongoDB启…

color ui

color ui——组件使用 组件类型 ColorUI Vant webapp ColorUI 下载地址 Git地址 官网地址 简介 ColorUI是一个css库!!!在你引入样式后可以根据class来调用组件,一些含有交互的操作我也有简单写,可以为你开发提供一…

微信小程序项目实例——我有一支画笔(画画)

微信小程序项目实例——我有一支画笔(画画) 文章目录微信小程序项目实例——我有一支画笔(画画)一、项目展示二、首页三、自由绘图四、照片绘图文末项目代码见文字底部,点赞关注有惊喜 一、项目展示 我有一支画笔是一…

JS中let用法

JS中let用法 基本用法 Let命令用来声明变量。它的用法类似于var,但是所声明的变量。只在let命令所在的代码块内有效。 上面代码块中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声…

蓝桥杯刷题冲刺 | 倒计时28天

作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.卡片2.数字三角形3.购物单4.回文日期1.卡片 题目 链接: 卡片 - 蓝桥云课 (lanqiao…

echarts 柱状堆叠图(图例和x轴都是动态的)

问题描述: echarts柱状堆叠图,是很常用的图表,官网的例子很简单 。图例(legend),x轴(xAxis)都是写死的。但是一般实际应用中都是 动态的。下面就举个例子,实现图例和x轴…