C可执行文件生成过程概述(深入理解计算机系统第七章01)
C可执行文件生成过程概述(深入理解计算机系统第七章01)
视频教程:南京大学 计算机系统基础 袁春风老师CSAPP-深入理解计算机系统 九曲阑干
我一直有这样一个疑问,每当我在编辑器中写下一行行代码,完成一个又一个程序时,写好的.c文件里其实都是写满了使用特定编码(ASCII、UTF-8、GBK等等)的字符,电脑或运行程序的机器是如何转化为一个可执行文件的呢?
以一个HelloWorld程序为例,在Linux系统中可以通过图中的gcc命令生成可执行文件,这实际上经历了下面几个过程,这里把整个过程分解采用手动链接的方式生成可执行程序。
gcc命令实际上是具体程序(如ccp、cc1、as等)的包装命令,用户通过gcc命令来使用具体的预处理程序cpp、编译程序cc1和汇编程序as等。
预处理首先是将.c文件通过预处理程序(c preprocessor)cpp生成预处理程序hello.i(通常以.i扩展名结尾),经过预处理后的文件还是一个可读的高级语言源程序文本文件,只不过不包含任何宏定义,为后续编译做准备。
这里直接使用cpp预处理器,也可以使用gcc -E -o hello.i ...
数据结构——栈与队列
栈 stack栈是限定仅在表尾进行插入和删除操作的线性表。把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。
栈的顺序存储结构实现因为栈本身属于线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,称为顺序栈。
sqstack.h
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#ifndef SQSTACK_H#define SQSTACK_H/************************************************************************** 宏定义*************************************************************************/#defin ...
蜂鸣器播放超级马里奥(STM32HAL库)
蜂鸣器播放超级马里奥(STM32HAL库)硬件部分1.无源蜂鸣器原理蜂鸣器按驱动方式可分为有源蜂鸣器(内含驱动线路)和无源蜂鸣器(外部驱动)(“源”指的是激励源)。有源蜂鸣器虽加电源就可以发出声音但频率相对固定,这里使用的是无源蜂鸣器,无源蜂鸣器利用电磁感应现象,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声,接入直流电只能持续推动振膜而无法产生声音,只能在接通或断开时产生声音。
2.频率音调对照表所以只需要将无源蜂鸣器接入电路中并用单片机控制引脚给它一定频率的方波信号就可以产生不同音调,再用延时加以节奏就可以用蜂鸣器模拟曲调实现音乐效果了。
软件部分1.播放单个音调音调函数第一个参数hz控制声音音调,本质是在循环中控制高低电平时间及占比即可控制音调,比如要播放中音1这个音调,该音调频率为523Hz也就是每个电平变化周期是1/523s==>1000000/523us,让其中高低电平各占一半,即输出低电平后延时500000/523us再输出低电平,后再延时500000/523us再输出高电平。
持续时间函数第二个参数time控制音调时间,本质是控制循 ...
数据结构——线性表
线性表线性表(List):零个或多个数据元素的有限序列。
顺序存储线性表
优点: 可以快速存取表中任一位置的元素,无需为变种元素之间的逻辑关系增加存储空间。
缺点: 插入删除需要移动大量元素,长度变化较大时难以确定存储空间的容量(分配大了浪费,小了溢出),造成存储空间碎片。查找性能O(1),插入删除O(n)。若线性表需要频繁查找,很少进行插入和删除操作时可以采用顺序存储结构,一个简单的顺序存储线性表实现例子:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331 ...
阿里云服务器部署个人网盘服务
阿里云服务器部署个人网盘服务
相关资源:kiftd : https://github.com/KOHGYLW/kiftd
1.安装JAVA运行环境1apt install java-11-openjdk-devel
安装完成后查看版本,输出下面内容说明已经安装好。
1234[root@nafxali ~]# java -versionopenjdk version "11.0.9.1" 2020-11-04 LTSOpenJDK Runtime Environment 18.9 (build 11.0.9.1+1-LTS)OpenJDK 64-Bit Server VM 18.9 (build 11.0.9.1+1-LTS, mixed mode, sharing)
CentOS 8还支持无头版本的OpenJDK,该版本提供了无需图形用户界面(不支持键盘,鼠标和显示系统)来执行应用程序所需的最少Java运行时,该版本具有更少的依赖性和更少的系统资源,因此它更适合于服务器应用程序。
1sudo apt install java-11-openjdk-headle ...
IPC-610E(电子组件的可接受性)
IPC-610E(电子组件的可接受性)IPC简介 IPC最初为“The Institute of Printed Circuit”的缩写,即美国“印制电路板协会”,后改名为“The Institute of the Interconnecting and Packing Electronic Circuit”(电子电路互连与封装协会),1999年再次更名为“Associatation Of Connecting Electronics Industries”(电子制造业协会”)。由于IPC知名度很高,所以更名后,IPC的标记和缩写仍然没有改变。IPC拥有两千六百多个协会成员,包括世界著名的从事印制电路板设计、制造、组装、OEM(Original equipment manufacturer 即原始设备制造商)加工、EMS(electronics manufacture service 即电子制造服务)外包的大公司,IPC与IEC、ISO、IEEE、JEDC一样,是美国乃至全球电子制造业最有影响力的组织之一。
IPC-A-610是国际上电子 ...
环境温湿度监控系统(51+DHT11+1602液晶)
环境温湿度监控系统(51+DHT11+1602液晶)使用模块:DHT11 Datasheet: https://www.alldatasheetcn.com/datasheet-pdf/pdf/1132088/ETC2/DHT11.htmlSMC1602 Datasheet: https://www.alldatasheetcn.com/datasheet-pdf/pdf/106031/ETC/SMC1602A.html89C52 Datasheet: https://www.alldatasheet.com/datasheet-pdf/pdf/240685/ATMEL/AT89C52.html
一.原理图
二.1602显示模块模块头文件:引脚定义,接口定义。
123456789101112131415161718#ifndef _1602_H_#define _1602_H_#include <reg51.h>#include <intrins.h>#define LCD_Bus P2 //LCD1602数据总线sbit RS = P0^7; // LCD ...
在浏览器中输入 URL 回车之后发生了什么
本文转自4Ark注意: 本文的步骤是建立在,请求的是一个简单的 HTTP 请求,没有 HTTPS、HTTP2、最简单的 DNS、没有代理、并且服务器没有任何问题的基础上,儘管这是不切实际的。
大致流程
URL 解析
DNS 查询
TCP 连接
处理请求
接受响应
渲染页面
一、URL 解析
地址解析 首先判断你输入的是一个合法的 URL 还是一个待搜索的关键词,并且根据你输入的内容进行自动完成、字符编码等操作。
HSTS(HTTP Strict Transport Security) 由于安全隐患,会使用 HSTS 强制客户端使用 HTTPS 访问页面
其他操作 浏览器还会进行一些额外的操作,比如安全检查、访问限制(之前国产浏览器限制 996.icu)。
检查缓存
二、DNS 查询基本步骤
浏览器缓存浏览器会先检查是否在缓存中,没有则调用系统库函数进行查询。
操作系统缓存操作系统也有自己的 DNS 缓存,但在这之前,会向检查域名是否存在本地的 Hosts 文件里,没有则向 DNS 服务器发送查询请求。
路由器缓存路由器也有自己的缓存。
ISP DNS 缓存I ...










