摘要: 一、如何衡量程序的运行性能 主要从两个角度来考虑,空间和时间。实现同样功能的情况下,代码运行时占用内存更少,运行速度更快的代码性能更高。运行时间和内存消耗是衡量程序性能的基本指标。 二、性能优化技巧 1.利用高速缓存 高速缓存对数据的访问速度是普通内存的上百倍,它对性能的提升,在于两点:时间局部性和 阅读全文
posted @ 2022-02-19 16:03 一只吃水饺的胡桃夹子 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 一、什么是信号? 1.概述 信号量,是操作系统提供的一种用来传递特定消息的机制。通过这种方式,操作系统可以将程序运行过程中发生的各种特殊情况转发给程序,并执行相应的服务函数。 信号的出现是随机的,通过轮询的方式进行判断会消耗大量的CPU资源,所以采用异步事件处理方式,程序告诉操作系统,当某个信号到来 阅读全文
posted @ 2022-02-19 00:28 一只吃水饺的胡桃夹子 阅读(189) 评论(0) 推荐(0) 编辑
摘要: 一、进程与线程 在计算机上运行的程序是指令与数据的组合,指令按照既定的逻辑控制计算机运行。操作系统以进程为单位分配资源,线程是操作系统调度执行的最小单位。 1.进程与线程的区别 1.进程有自己的地址空间,多个线程共用一个地址空间: ——线程可以节省系统资源,不仅可以保持效率,甚至能够提高效率。 —— 阅读全文
posted @ 2022-02-13 16:26 一只吃水饺的胡桃夹子 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 由于有些规则用的少,记不住,但还是时不时能用到,开个记录帖记一下这些零散的规则。 参考文档:跟我一起学Makefile 1.忽略某些文件 -include <filename> 2.环境变量 MAKEFILES 如果当前环境中定义了该变量,make 会把该变量当作类似 include 的动作,但该变 阅读全文
posted @ 2022-02-11 17:04 一只吃水饺的胡桃夹子 阅读(31) 评论(0) 推荐(0) 编辑
摘要: 启动代码完成了 linux 系统的启动,并获取了大量的硬件信息,供操作系统完成内核初始化的工作。 在 init/ 目录下有一个 main.c 文件,完成了内核初始化的所有工作。这个文件做的工作如下图所示: 一、计算内存边界值 ROOT_DEV = ORIG_ROOT_DEV; //根文件系统所在的设 阅读全文
posted @ 2022-02-09 21:08 一只吃水饺的胡桃夹子 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 一、传参 C语言有两种传递参数的方法,分别是值传参和指针传参,但其实本质都是值传参,只不过指针传参传递的值是指针罢了。 编译器会在函数调用时,对传入的参数进行复制,所以函数使用的参数和传递的参数不是同一个实体。 指针传参虽然指针本身无法被修改,但是可以修改指针指向的值,所以如果想要修改一个值,可以传 阅读全文
posted @ 2022-02-08 22:51 一只吃水饺的胡桃夹子 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 预处理器的作用是在编译器处理 C 代码前,先对源码进行一系列必要的转换。这些转换可以引入代码正常编译所需要的各个依赖项,动态修改代码以适应不同的编译环境,甚至根据需要自动生成部分 C 代码。对预处理器的合理使用,可以提高程序的可配置性。 在gcc中,通过 -E 参数生成预处理过后的文件。 预处理器通 阅读全文
posted @ 2022-02-07 20:35 一只吃水饺的胡桃夹子 阅读(337) 评论(0) 推荐(0) 编辑
摘要: 如果用const关键字修饰指针类型,被修饰的指针无法被重新赋值,也不能通过该指针来修改所指向的数据。 一、指针与数组 由黄色区域的代码可以看出,数组的内容是连续排列的,并且索引号最小的数在低字节。 由红框内的代码可以看出,数组地址为数组中第一个数据所在的地址。 下图蓝色区域的代码可以看出,sizeo 阅读全文
posted @ 2022-02-07 11:54 一只吃水饺的胡桃夹子 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 一、枚举 编译器不为枚举类型定义生成任何指令,在C语言中,每一个自定义枚举类型中的枚举值,都以int类型的方式被存储的。可以用typename进行验证。 二、结构体 结构体用于存放不同类型的数据,本质上是对其包含的数据进行一个封装,因此从编译产物的角度来看,只需要把它封装的这些数据连续地存放在内存中 阅读全文
posted @ 2022-02-06 10:58 一只吃水饺的胡桃夹子 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 一、创建静态库 创建工程可以参考visual studio2019入门——创建工程 1.不同的是在创建新项目时,搜索并选择静态库: 2.创建成功后,如果用不到的话,把自带的头文件和源文件删掉,反之我是用不到,动态库也是一样的,先删掉用不到的: 3.选择不使用预编译头,动态库也是一样的: 4.接下来就 阅读全文
posted @ 2022-01-29 17:44 一只吃水饺的胡桃夹子 阅读(468) 评论(0) 推荐(0) 编辑