预处理和程序的编程(跑路人笔记2)

简介: 预处理和程序的编程(跑路人笔记)

编译

通过指令gcc test.i -S


编译完成后会得到test.s文件


编译部分会在计算机专业一门叫做:《编译原理》的课上讲解如果大家感兴趣可以听一听在哪一节课上会讲


语法分析

词法分析

语义分析

符号汇编

符号汇总我会在汇编这一步提一嘴(毕竟汇编生成了符号表)


汇编

通过指令gcc test.s -c


将汇编指令转换成了二进制指令并形成符号表然后放在text.o(此文件为elf格式)文件内


文件内容:


image.png


我们虽然肉眼看不懂二进制指令但是我们可以通过工具readelf来看此文件.


生成符号表

readelf-s就可以得到


image.png


对比一下之前的代码


image.png


不难发现我们的文件里有函数和全局变量


可是这个的作用是什么呢?


我们不妨将Add函数拆开到另一个源文件


image.png


然后经过编译的全部过程就得到了这些


image.png


这个时候我们就需要链接来继续后面的操作了


链接

我们知道链接的作用有


符号表的合并和重定位

合并段表


image.png



将符号表重定位并合并之后就可以交给我们的运行环境来操作了.


题外话

不得不说的是之前的程序员才是真正的大佬


推荐书:《程序员的自我修养》当然这是后期看的书现在看多少有点劝退.(买之前看一下豆瓣评分不要买成同名的书了!!!


VIM作为极强一个编译器也可以搞一下


VIM学习资料

简明VIM练级攻略:


简明 Vim 练级攻略 | 酷 壳 - CoolShell


VIM速查卡


给程序员的VIM速查卡 | 酷 壳 - CoolShell


运行环境

程序必须载入内存中。在有操作系统的环境中: 一般这个由操作系统完成。在独立的环境中,程序的载入必须由手工安排,也可能是通过可执行代码置入只读内存来完成。


程序的执行便开始。接着便调用main函数。


开始执行程序代码。这个时候程序将使用一个运行时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程 一直保留他们的值。


终止程序。正常终止main函数;也有可能是意外终止。


对第3的小讲


image.png


执行程序时就在栈区分配的main函数和Add函数的空间将临时变量放入栈区来后运行程序.


关于函数栈帧的建立和摧毁我会再出一篇博客继续聊.



相关文章
|
5月前
|
存储 缓存 NoSQL
不扒瞎,这个程序让我从150s优化到了5s
在优化一个业务开发组的生产问题时,发现销售管理系统查询数据延迟高达2-3分钟。问题根源在于,程序在for循环中频繁读取Redis大KEY数据,导致性能下降。解决方案是采用本地缓存HutoolCache,将耗时降至毫秒级别。此外,还对RedisTemplate配置进行了研究,Jackson2JsonRedisSerializer在序列化时包括了所有字段,即使字段值为null,增加了数据体积。通过对ObjectMapper的调整,仅序列化非空字段,可以显著提升redis读取性能。本文同时还提醒我们在使用Redis时要注意大对象缓存,强调了正确使用和配置缓存以及避免大对象存储的重要性。
65 5
|
6月前
|
IDE 安全 程序员
揭秘如何用C编写出无敌的程序代码,你绝对会后悔错过!
揭秘如何用C编写出无敌的程序代码,你绝对会后悔错过!
39 1
|
6月前
|
前端开发 JavaScript Java
童年回忆——捕鱼达人(内含源码inscode一键运行)
童年回忆——捕鱼达人(内含源码inscode一键运行)
|
存储 自然语言处理 编译器
【C语言航路】第十五站:程序环境和预处理(上)
【C语言航路】第十五站:程序环境和预处理
62 0
|
编译器 Linux C语言
【C语言航路】第十五站:程序环境和预处理(下)
【C语言航路】第十五站:程序环境和预处理(上)
62 0
|
算法 程序员 编译器
当程序遇上困难:程序调试的艺术(VS)
当程序遇上困难:程序调试的艺术(VS)
68 0
|
API C语言 开发者
【精选】太阳系八大行星运转轨迹程序,C语言,源代码分享
太阳系行星运行轨道图,C语言,源代码分享
297 0
【精选】太阳系八大行星运转轨迹程序,C语言,源代码分享
|
算法 C语言 Python
01【C语言 & 趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。
01【C语言 & 趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。
01【C语言 & 趣味算法】百钱百鸡问题(问题简单,非初学者请忽略叭)。请注意算法的设计(程序的框架),程序流程图的绘制,算法的优化。
|
存储 自然语言处理 编译器
程序员内功心法之程序环境和预处理(1)
程序员内功心法之程序环境和预处理(1)
133 0
程序员内功心法之程序环境和预处理(1)
|
程序员 编译器 C语言
程序员内功心法之程序环境和预处理(2)
程序员内功心法之程序环境和预处理(2)
166 0
程序员内功心法之程序环境和预处理(2)