摘要: ## 4字节对齐的实质 之前有想过为什么C语言的字符串库函数,几乎都要处理这种4字节对齐问题,查找资料后,认为原因是: 1. 若非对齐访问,需要读取两次,CPU做数据重组,导致软件运行效率低。 在看操作系统的硬件原子操作时,发现若对齐有误或不规范,会有以下两种问题发生: 2. 通过结构体跨主机通信时 阅读全文
posted @ 2023-03-18 18:03 Qing-Huan 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 0. 写在前面 进程与线程的关系 Linux如何存放和表示进程(tast_struct、thread_info) 如何创建进程(fork()、最终调用clone()) 如何把新的执行映像装入到地址空间(exec()族) 如何表示进程的层次关系,父进程如何收集后代信息(wait()系统调用族) 进程是 阅读全文
posted @ 2024-01-10 13:12 Qing-Huan 阅读(4) 评论(0) 推荐(0) 编辑
摘要: 一、Linux内核特征 Linux内核组织形式为整体式结构 进程调度方式简单而有效 支持内核线程(或称为守护进程) 支持多种平台的虚拟内存管理 虚拟文件系统 模块机制 增加系统调用 面向对象 二、Linux内核五大子系统 三、系统数据结构 在Linux内核中使用频率较高的数据结构: task_str 阅读全文
posted @ 2024-01-08 23:39 Qing-Huan 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 宏内核与微内核 宏内核:所有内核代码都编译成一个二进制,所有的内核代码都运行在一个大内核地址空间里,内核代码可以直接访问和调用,效率高且性能好 微内核:把操作系统分成多个独立的功能模块,每个功能模块之间的访问需要通过消息来完成,因此效率没有那么高 宏内核架构优点:设计简洁和性能较好 微内核架构优点: 阅读全文
posted @ 2024-01-08 23:38 Qing-Huan 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 编译Linux源码 进入源码目录 /usr/src 从当前机器的启动目录拷贝配置信息到源代码目录。这步操作的意思是我们编译内核的配置采用用当前环境一致的配置 cp -v /boot/config-$(uname -r) .config 可以通过如下命令启动配置界面 make menuconfig s 阅读全文
posted @ 2024-01-08 23:32 Qing-Huan 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 7. 控制语句 if 语句 不推荐用else,虽然符合业务逻辑,但是不够直观,需要将前面 N 个条件判断看懂,才能明白何种条件下才能进入else语句块中。 因此,下面代码中最好用 else if (data % 3 == 2) int data = 0; cout << "请输入一个int数值:"; 阅读全文
posted @ 2024-01-05 13:26 Qing-Huan 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 1. 数据类型 重点 return 先返回函数结果,后结束当前函数 返回函数结果:返回值放在eax寄存器中,然后ret返回 功能不同的代码之间要空行 一份代码注释风格不要多样化 /**/ 块注释不能嵌套 long long 是C99里面定义的 extern int data; 编译器理解为:该变量是 阅读全文
posted @ 2024-01-05 13:08 Qing-Huan 阅读(7) 评论(0) 推荐(0) 编辑
摘要: 最近玩STM32,里面有个关键字 `__weak`,当我们重定义了用`__weak`修饰的函数时,运行过程中会调用我们重定义的函数。 ![image](https://img2023.cnblogs.com/blog/1499308/202306/1499308-20230608081427062- 阅读全文
posted @ 2023-06-08 08:24 Qing-Huan 阅读(214) 评论(0) 推荐(0) 编辑
摘要: ## 0. 论文正文 https://files.cnblogs.com/files/qinghuan190319/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1%E8%AE%BA%E6%96%87-%E6%9D%8E%E8%99%B9%E5%A8%87.zip?t=168 阅读全文
posted @ 2023-05-27 15:07 Qing-Huan 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 问题来源 查找系统调用open函数,发现存在同名函数,可是C语言没有函数重载的概念。 代码层面分析 从代码中跳转到open函数声明,看到了变参函数,这样就符合C语言的语法规则了。 可变参数 参数需要具备一定特征 第一个参数为参数总个数 第N个参数为NULL或其他具有代表性的值 参数从右向左入栈,然后 阅读全文
posted @ 2023-04-17 19:56 Qing-Huan 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 1. 在调用成员函数前,先将对象地址存入 ecx 寄存器,进入函数后将 ecx 压栈保存对象地址,当需要用到 this指针 时,再弹栈取出赋值给函数内部自带的一个 this指针 2. 数据成员是由 this指针 +偏移取到的。类的对齐规则和结构体一致 3. 静态成员函数没有 this指针 4. 若函 阅读全文
posted @ 2023-04-17 08:51 Qing-Huan 阅读(26) 评论(0) 推荐(0) 编辑