
程序人生
文章平均质量分 93
猪哥-嵌入式
这个作者很懒,什么都没留下…
展开
-
Visual Paradigm简单教程(2):绘制序列图
Visual Paradigm简单教程(1):绘制状态机图1. 前言在上一篇文章中,介绍了使用Visual Paradigm简单教程(1):绘制状态机图,本文我们接着介绍如何使用visual paradigm绘制序列图。2. 相关概念2.1 序列图概念所谓序列图可以理解为软件不同部分,比如组件之间的交互序列图,序列2字说明了交互序列流程,比如我们想要描述一个软件的使用顺序、业务流程顺序等待,都可以通过序列图来实现。2.2 生命线这里使用“生命线”可能不够形象,个人理解 应该称为 节点,即序列图原创 2022-01-15 21:40:02 · 11133 阅读 · 4 评论 -
进程栈的初始化
之所以写这个主题,是因为之前对于进程或程序的栈初始化及内容的概念是模糊的,而这个概念又具有一定的代表性,比如linux引导,普通进程运行启动等等。 一般进程刚开始启动的时候,是需要知道一些进程运行环境的,最基本的就是系统环境变量和进程的运行参数,这里最常见的一种做法是操作系统在进程启动前会将这些信息提前保存到进程的虚拟空间的栈中,我们假设系统中有两个环境变量:HOME=/hom...原创 2018-07-25 22:48:29 · 1275 阅读 · 0 评论 -
编译和链接背后的机制
我们开始程序一般会用IDE,也就是集成开发环境,比如Visual Studio、Keil、IAR等,IDE的出现极大的解放了程序员的工作,使得程序员不用再去关注过于底层的物理性的操作,而只去关注应用层面的开发,但是也有缺点,就是对于我这种想象力不强的笨程序员来讲,对于一些底层操作,很难直观的去想象。 IDE同城会将编译和链接的过程一步完成,这个合并的过程,就是我们熟悉的IDE中的b...原创 2018-07-20 22:53:17 · 448 阅读 · 0 评论 -
程序 目标文件结构及bss段分析
对于我们写好的程序,最终会生成目标文件,那么目标文件的内部结构是如何呢? 目标文件一般包含编译后的机器指令代码、数据,还有链接是所需要的一些信息,比如符号表、调试信息等,而且一般目标文件会将这些不同的信息按照不同的属性,以“节(section)”也叫“段(segment)”的形式进行存储,这里姑且成为“段”吧,那么常见的段包含什么呢?没错,一般包含“代码段”、“数据段”、bss段...原创 2018-07-21 20:32:20 · 1426 阅读 · 2 评论 -
汇编中调用C中的函数,函数名前加下划线“_”
之前见过这种用法,但是不太清楚为什么,就以为是约定俗成,其实也算是约定俗成,这样做的目的是为了防止符号名冲突,因为在一个程序中往往是包含汇编和C文件的,汇编用于启动部分,C文件用于应用程序,最终通过编译器实现编译,对于编译器来说,汇编和C是一视同仁的,那么就会有个问题,如果在汇编和C文件中使用了同一个名字,这是很可能出现的,毕竟汇编相当于机器码也算是稍微高级的语言,在定义子程序或函数时,也是...原创 2018-07-21 22:54:05 · 5342 阅读 · 0 评论 -
__cplusplus、extern “C”关键字
我们在阅读程序时,经常会见到__cplusplus关键字,比如下面的代码:#ifdef __cplusplusextern "C" {#endifvoid *memset(void* ,int , size_t);#ifdef __cplusplus}#endif 这里面,两种关键字,都是为了实现C++与C兼容的,extern “C”是用来在C++程序中声明或...原创 2018-07-22 11:21:26 · 23810 阅读 · 1 评论 -
全局变量的优缺点及为什么要少用全局变量
全局变量 对于程序员来说,是程序 “同步”的一种最方便的 方式,我相信大多数的程序员 刚开始都是使用全局变量来实现“同步”操作的,但是随着我们 编程理念的升华,我们会发现,原来全局变量不是我们想象的只有好用,而没有缺点。优点:1)全局可见,任何 一个函数或线程都可以读写全局变量-同步操作简单。2)内存地址固定,读写效率比较高。缺点:1)全局变量存放在静态存储区,系...原创 2019-03-27 22:06:58 · 35537 阅读 · 14 评论 -
Unix编程艺术:哲学基础
目录阐述一:阐述二阐述三:1、模块原则。2、清晰原则。3、组合原则.4、分离原则:策略同机制分离,接口同引擎分离。5、简洁原则:设计要简洁,复杂度能低则低。6、吝啬原则:除非确无 它法,不要编写庞大的程序。7、透明性原则:设计要可见,以便 审查和调试。8、健壮原则:健壮源于透明与简洁。9、表示原则。10、通俗原则:接口设计 避免标新立异...原创 2019-09-09 20:54:23 · 627 阅读 · 0 评论 -
Unix编程艺术:模块式编码的6个问题思考
在前面的文章《Unix编程艺术:哲学基础》中,提到的模块原则是复杂软件的一个利器,也是Unix编程艺术的核心之一,模块性体现在良好的代码中,这首先来自于良好的设计,在编写代码时,需要考虑下面这些问题,这些问题有助于提高代码的模块性。1、有 多少全局变量?全局变量对模块化是 毒药,很容易使各模块轻率、混乱地互相泄露信息,全局变量 同时也意味着代码不能重入,也就是说同一个进程的多个实例可能彼...原创 2019-09-10 21:20:13 · 366 阅读 · 0 评论