- 博客(49)
- 收藏
- 关注
原创 1、ARM汇编基础
本文介绍了ARM汇编语言基础,包括汇编学习的必要性、GNU汇编语法规范及常用指令。主要内容: 汇编学习的必要性:芯片启动初期需要汇编初始化运行环境(堆栈、DDR等)才能运行C程序。 GNU汇编语法: 与MDK/IAR语法差异 语句结构:标号/指令/注释三部分 大小写规范、段定义方法 常用伪指令(.global/.byte/.equ等) 核心汇编指令: 寄存器传输指令(MOV/MRS/MSR) 存储器访问指令(LDR/STR)及其在配置外设寄存器中的应用 数据宽度说明(32位默认) 文章重点讲解了汇编在底层开
2025-11-11 19:23:25
965
原创 21.SystemV-共享内存
本文介绍了Linux下使用共享内存实现高效进程间通信的方法。通过封装核心接口(comm.hpp),展示了服务端与客户端的完整实现流程。共享内存允许多进程直接访问同一内存区域,相比管道减少了数据拷贝次数(0次vs2次),显著提升性能。文章详细解析了键值生成、内存创建/映射、数据读写等关键步骤,并对比了共享内存与管道的差异,强调共享内存生命周期独立于进程但需手动管理删除。最后指出共享内存虽高效但不提供同步机制,需配合信号量等其他手段实现进程同步。
2025-10-31 17:01:28
1102
原创 20.进程间通信-匿名/命名管道
进程间通信(IPC)是操作系统中的重要机制,主要用于实现进程间数据传输、资源共享、事件通知和进程控制。通信方式可分为管道(匿名/命名)、System V IPC和POSIX IPC三类。匿名管道通过pipe()创建读写端,fork()创建子进程后,子进程写入数据,父进程读取。命名管道则通过mkfifo创建具名文件实现持久化通信。共享内存和信号量等POSIX IPC机制支持跨主机通信,是更高级的通信方式。示例代码展示了父子进程通过匿名管道通信的实现过程,以及命名管道的创建和使用方法。
2025-10-29 09:35:57
386
原创 19.动静态链接
本文介绍了动静态链接的基本概念与实现方法。静态链接(.a文件)在编译时将库代码嵌入可执行文件,程序运行时不依赖外部库,但会导致内存冗余。动态链接(.so文件)仅在编译时记录函数地址,运行时由系统加载共享库,节省内存空间。文章详细讲解了两种链接方式的制作流程:静态库通过ar工具打包目标文件,动态库需编译为位置无关代码(-fPIC)并用-shared选项生成。同时介绍了三种动态库运行时加载路径的设置方法,并对比了它们在虚拟地址空间中的映射差异:静态库代码直接存入text段,动态库则映射到共享内存区域。
2025-10-25 17:42:41
1487
原创 12、C++ STL 系列:深入理解 `vector` 的构造、容量管理、接口操作与迭代器失效
本文系统讲解C++ STL中vector容器的核心用法,包含5个关键模块:1) 多种构造方式(默认、拷贝、区间构造等);2) 容量管理机制(size与capacity区别,resize和reserve优化);3) 常用接口操作(插入、删除、查找等);4) 迭代器失效问题及解决方案;5) 安全删除元素的正确方法。通过可运行的代码示例,详细说明各功能的适用场景和注意事项,特别强调迭代器失效的风险防范。适合C++开发者系统掌握vector的核心特性和高效使用技巧。
2025-10-24 11:57:59
355
原创 18.理解文件系统
本文系统介绍了磁盘硬件结构及操作系统层面的文件管理机制。首先从磁盘物理结构入手,详细解析了盘片、磁头、磁道、扇区等组件的工作原理,并阐述了磁盘寻址过程。其次,通过逻辑抽象将圆形磁盘结构线性化为扇区数组,解释了逻辑块寻址(LBA)的原理及物理地址映射方法。在操作系统层面,重点分析了文件系统以块(Block)为单位的访问机制,深入剖析了ext2文件系统的核心结构,包括超级块、块组描述符、位图、Inode表和数据块等组成部分,揭示了文件存储和访问的内在逻辑。全文通过清晰的图示和表格,完整呈现了从物理磁盘到文件系统
2025-10-23 13:01:52
1403
原创 17.基础IO_3
摘要:基础IO与缓冲区机制解析 本文深入探讨了IO缓冲区的核心概念与实现机制。缓冲区本质是一块内存,用于协调CPU与外部设备的速度差异(减少系统调用次数)。文中分析了三种缓冲策略:无缓冲(实时性高)、行缓冲(适合文本)、全缓冲(批量高效)。通过实验代码展示了用户级缓冲区的特性,证明缓冲区不在内核中。当重定向输出时,缓冲策略从行缓冲变为全缓冲,导致fork()后数据被复制。最后,作者用C语言实现了一个简化版缓冲输出系统,包含FILE_结构体定义、fopen_初始化函数和fwrite_写入函数,模拟了行缓冲机制
2025-10-22 21:07:08
1288
原创 16.基础IO_2
本文介绍了Linux文件描述符分配规则和重定向机制。文件描述符从0开始分配,优先使用最小可用值,0/1/2分别对应标准输入/输出/错误。通过关闭标准输出并打开新文件,可实现重定向,本质是修改fd指向的内核结构体。系统调用dup2()能直接复制文件描述符。Linux遵循"一切皆文件"理念,所有设备都通过文件接口访问,核心是struct file结构体和多态的file_operations操作集。用户态通过整数fd访问不同设备,内核则根据f_op调用具体实现,体现了多态思想。
2025-10-21 15:42:02
1301
原创 11、深入理解 C++ 字符串:构造、遍历与底层机制
本文系统讲解了C++中std::string的常用操作。主要内容包括:1)多种字符串构造方式,如默认构造、拷贝构造、子串构造、C风格字符串转换等;2)字符串遍历方法,包括下标访问、迭代器遍历和范围for循环;3)反向迭代器的使用;4)字符串与整型转换的实现;5)resize和reserve等容量操作函数的使用。通过示例代码展示了std::string的灵活性和高效性,为C++字符串处理提供了全面参考。
2025-10-20 17:07:13
717
原创 15.基础IO_1
本文总结了文件操作的基础知识和系统调用。主要内容包括:1)文件操作的基本共识,如空文件也占空间、文件由内容加属性组成等;2)C语言文件操作回顾,列举了常用函数、文件模式及示例代码;3)Linux系统调用,详细介绍了open()、read()、write()、close()四个核心函数;4)解释了标准输入输出流(stdin/stdout/stderr)的文件描述符分配;5)概述了进程访问文件的底层数据结构关系。文章强调所有文件操作最终都需通过操作系统完成,并提供了实用代码示例说明文件读写操作。
2025-10-20 12:41:27
859
原创 10、一个简易 vector:C++ 模板与 STL
本文通过手写简易vector类,介绍了C++模板编程和STL的核心概念。主要内容包括:1)模板语法template<class T>实现泛型编程;2)类封装与内存管理,使用new/delete[]进行动态内存分配;3)动态扩容策略及运算符重载;4)STL标准库的优势与常用容器。文章通过代码示例展示了如何实现一个具备基本功能的动态数组,同时对比了STL标准库的高效性和安全性,为理解C++模板和STL机制提供了入门指导。
2025-10-15 17:35:23
999
3
原创 14.C 语言实现一个迷你 Shell
本项目实现了一个基于C语言的简易Shell,具备基本命令行功能。系统通过循环结构实现:1)显示带路径的提示符;2)读取用户输入;3)解析命令参数(支持exit退出);4)创建子进程执行命令;5)父进程阻塞等待。核心使用了fgets读取输入、strtok分割参数、fork创建进程、execvp执行命令、waitpid等待进程结束等系统调用。该Shell模拟了Bash的基础行为,代码简洁(约60行),适合学习Linux进程控制和命令解析机制,可作为操作系统课程实践项目。
2025-10-15 14:10:48
637
原创 13.进程控制_2
本文介绍了进程控制中的非阻塞式等待和进程程序替换技术。非阻塞式等待通过WNOHANG选项使父进程在等待子进程时保持活跃,可用于轮询多个子进程或执行其他任务。文中详细解析了status状态值的获取方式,并提供了非阻塞等待的实际应用场景和代码示例。 在进程程序替换部分,重点讲解了exec系列函数的6种变体,包括参数传递方式(列表/数组)和路径查找行为(PATH查找/不查找)。通过代码演示了子进程加载新程序时原有代码被完全覆盖的特性,并解释了进程替换的基本原理——替换用户空间代码和数据而不改变进程ID。
2025-10-14 21:06:55
1436
原创 9、C/C++ 内存管理详解:从基础到面试题
本文系统介绍了C/C++内存管理的核心知识,包括程序内存分布(栈、堆、数据段等)、C语言的动态内存管理函数(malloc/calloc/realloc/free)和C++的new/delete操作符及其底层实现原理。重点讲解了定位new表达式、内存泄漏的危害与检测方法,并对比了malloc/free与new/delete的区别。文章还提供了常见面试题和内存管理最佳实践,帮助开发者掌握底层内存管理技能并避免内存泄漏问题,适合C/C++初学者和求职者学习参考。
2025-10-13 20:12:18
558
原创 12.进程控制_1
进程管理与等待机制摘要 本文介绍了Linux系统中的进程管理核心概念,重点解析了fork()函数和进程等待机制。 fork()函数:创建子进程的关键系统调用,父子进程共享代码但拥有独立数据空间,采用写时拷贝优化性能。fork后父子进程执行顺序由调度器决定。 进程终止:三种终止方式(main返回值、exit、_exit)及其区别,其中exit会刷新缓冲区而_exit直接退出。 进程等待必要性:防止僵尸进程、获取子进程结果、同步执行顺序、资源回收。wait()和waitpid()是主要等待方法,前者阻塞父进程直
2025-10-13 18:33:45
1201
原创 11.程序地址空间_2
本文深入探讨了进程地址空间的管理机制。在32位系统中,每个进程拥有4GB虚拟地址空间,由Linux内核的mm_struct结构管理,该结构通过vm_area_struct划分区域(代码段、堆、栈等)并维护页表映射。页表作为核心转换机制,将虚拟地址通过多级查找转换为物理地址,实现进程隔离和内存保护。进程控制块task_struct通过指向mm_struct实现对地址空间的管控。这种设计避免了直接使用物理地址带来的安全风险,提供了灵活的内存管理能力,支持虚拟内存大于物理内存的场景。文中配图直观展示了从虚拟地址到
2025-10-11 21:20:46
695
原创 8、C++匿名对象和程序运行内存划分段
本文介绍了C++中的匿名对象概念和程序运行时的内存分段结构。匿名对象是指仅在一行代码中有效、执行后立即析构的临时对象,示例代码展示了其生命周期验证。内存分段部分详细解析了栈(存储局部变量、函数调用信息)、堆(动态分配内存)、数据段(全局/静态变量)和代码段(程序指令)的特点及存储内容。最后通过一道综合题目,分析不同变量(如全局变量、局部变量、字符串字面量等)在内存中的分布位置,帮助理解程序运行时内存布局机制。关键点包括:全局变量根据初始化状态存储于数据段或BSS段,局部变量在栈中,动态分配内存在堆中,而代码
2025-10-10 20:51:05
1031
原创 10.程序地址空间_1
本文通过一个父子进程修改全局变量的实验,展示了程序地址空间的重要概念。实验发现父子进程中相同地址的全局变量值却不同,这是因为fork()创建了独立的地址空间副本,并采用写时复制(Copy-On-Write)机制:只有当子进程修改变量时,系统才会分配新的物理内存。关键知识点包括fork()的返回值含义、进程ID类型pid_t、全局变量的独立性、地址空间与物理内存的关系等。这种机制既保证了进程间的数据隔离,又提高了系统资源利用率。
2025-10-10 14:53:06
479
原创 09.Linux环境变量
环境变量是操作系统中用于配置系统行为的动态键值对,主要功能包括控制程序默认行为、传递配置信息和设置系统参数。常见的环境变量如PATH、HOME、USER等可通过echo、export、env等命令查看和管理。在C程序中可通过getenv()获取环境变量。环境变量分为本地变量(仅当前shell可见)和导出变量(对子进程可见),使用export可使变量传递给子进程。理解环境变量的作用域和生命周期对系统配置和程序开发至关重要。
2025-10-09 22:12:34
994
原创 7、C++ 编程技巧实战:不用循环语句求 1+2+...+n,并深入理解友元函数与静态成员
本文介绍了一种不使用循环、递归等常规方法的C++技巧来计算1+2+...+n的和。核心思路是利用类的构造函数和静态成员变量:通过创建n个Sum类对象,每次构造函数自动执行累加操作,静态变量保存结果。同时深入讲解了友元函数在运算符重载中的应用,以及静态成员变量的特性。这种解法展示了C++面向对象编程的巧妙之处,特别是在限制作业条件下,通过构造函数副作用和静态变量共享数据特性实现功能。文章还延伸讲解了友元函数访问私有成员的必要性,以及运算符重载的实现原理。
2025-10-09 16:34:20
1009
原创 6、C++ 面向对象核心知识详解:从 Date 和 A 类谈起
本文深入解析C++面向对象编程的核心概念,通过Date和A类示例讲解:1)构造函数与拷贝构造函数的初始化列表特性;2)const修饰成员函数的作用及this指针原理;3)指针const修饰的四种形式;4)隐式类型转换中临时变量的const引用特性;5)静态成员变量的共享特性与对象计数实现;6)取地址运算符重载的应用。文章重点剖析了成员变量初始化顺序、const成员函数的权限控制原理、以及静态成员变量的声明定义要点,帮助读者掌握类设计的核心机制。
2025-10-09 11:14:12
517
原创 5、C++ 栈类设计详解:构造函数、拷贝构造与深浅拷贝问题
本文深入解析C++中栈类的设计要点,重点探讨构造函数、拷贝构造和深浅拷贝问题。当类包含指针成员时,编译器自动生成的拷贝构造和赋值运算符会进行浅拷贝,导致多个对象共享内存,引发双重释放崩溃。解决方案是手动实现深拷贝:在拷贝构造函数中重新分配内存并复制数据,在赋值运算符中先释放旧内存再分配新空间。文章还强调了"四大函数"(构造、拷贝构造、赋值运算符和析构)在类设计中的核心地位,提醒开发者对指针成员必须手动管理资源。完整示例代码展示了如何正确实现深拷贝的栈类。
2025-10-02 00:11:52
723
原创 4、C++ 日期类设计详解:拷贝构造与运算符重载的妙用
本文详细讲解了C++中类的拷贝构造和运算符重载两个功能。通过日期类Date的示例,阐述了拷贝构造函数的作用、使用场景和必要性,以及如何正确Const引用来避免问题。重点介绍了运算符重载的设计技巧,包括==、>、>=等运算符的实现方法,强调了代码复用的重要性。最后列出了C++中5个不能重载的运算符操作符。这些知识点对编写高质量、可维护的C++类类非常重要,也是面试常考内容。全文以实际代码示例辅助理解,帮助读者掌握类的核心设计方法。
2025-10-01 16:26:23
865
原创 08. Linux进程状态_3
摘要: Linux进程状态包括R(运行)、S(可中断睡眠)、D(不可中断睡眠)、Z(僵尸)、T(停止)、X(终止)。其中,T状态表示进程被信号终止或调试器跟踪,Z状态是已终止但未被父进程回收的子进程,可能导致资源浪费。孤儿进程是父进程终止后仍在运行的子进程,由init/systemd自动接管。进程优先级通过nice值调整,范围-20(最高)到19(最低)。CPU调度采用时间片轮转机制实现并发,多核环境下可实现并行。进程特性包括竞争性、独立性及并发/并行执行。
2025-09-29 12:18:45
1070
原创 3、深度解析 C++ 类与对象:以 Stack、Time、A1 三类示例代码为核心
本文深入解析C++类与对象机制,围绕Stack、Time、A1三类示例展开讨论。重点剖析了类声明与定义的区别、构造函数与析构函数的使用、拷贝构造函数原理、赋值运算符重载以及C++11引入的移动语义等核心概念。文章通过具体代码示例,详细讲解了如何正确实现资源管理类,避免浅拷贝问题,并介绍了"三五法则"和this指针机制。对于涉及动态内存分配的类,特别强调了必须自定义拷贝控制成员函数的重要性,以确保资源安全。文章既涵盖基础语法,又结合C++11新特性,为读者构建了完整的面向对象编程知识框架。
2025-09-27 16:19:28
1189
原创 2、深入理解 C++ 引用、指针、内联函数与效率对比 —— 实战讲解与代码分析
C++核心概念解析:引用、指针、内联函数与效率对比 本文深入解析C++中的引用、指针、内联函数等核心概念。主要内容包括:1) const指针的区别与应用;2) 引用作为函数参数和返回值的典型场景;3) 引用返回与静态变量的关系;4) 通过时间测试展示引用相比值传递的效率优势;5) 指针与引用的本质区别;6) auto类型推导和typeid的应用;7) 内联函数与宏的区别;8) nullptr相比NULL的优势。文章通过代码示例和性能测试,帮助读者深入理解这些关键概念的实际应用和效率差异。
2025-09-25 20:56:12
1222
原创 1、C++基础知识精讲:函数重载、缺省参数、引用与编译流程
本文介绍了C++开发中的核心概念:1)函数缺省参数支持从右向左设置默认值;2)函数重载通过参数列表区分同名函数;3)extern "C"实现C/C++混合编译;4)引用机制作为变量别名必须初始化。同时解析了C/C++编译流程,包括预处理、编译、汇编和链接阶段,其中C++特有的名称修饰支持函数重载等特性。这些基础知识是掌握C++语言的关键。
2025-09-24 21:17:23
762
原创 7、二叉树-四种遍历方式
本文介绍了二叉树的四种常见遍历方式:前序遍历、中序遍历、后序遍历和层次遍历。每种遍历方式都有其特定的访问顺序和应用场景:前序遍历适合复制树结构,中序遍历在二叉搜索树中可得到有序序列,后序遍历常用于删除树结构,层次遍历适用于图形化展示和广度优先搜索。文章还通过C语言代码展示了递归实现的前序、中序和后序遍历,并解释了递归调用栈的工作原理。最后提供了一个示例二叉树和对应的遍历实现代码,帮助读者理解不同遍历方式的具体应用。
2025-09-17 15:54:40
843
原创 6、二叉树-堆排序
堆排序是一种基于完全二叉树的高效排序算法,其核心思想分为构建堆和排序两个阶段。构建堆时采用自底向上的Floyd建堆法,时间复杂度为O(n);排序阶段通过反复交换堆顶元素并调整堆结构,时间复杂度为O(nlogn)。该算法具有稳定的O(nlogn)时间复杂度,原地排序的空间复杂度O(1),但不稳定且常数项较大。堆排序适合大数据量场景,也常用于优先队列实现,但不推荐用于小规模数据排序。
2025-09-16 20:17:29
607
原创 5、二叉树-小堆
小堆是一种完全二叉树,每个节点的值都小于或等于其子节点,最小值位于堆顶。构建小堆的步骤包括:1)从最后一个非叶子节点开始调整;2)执行向下调整操作,确保父节点小于子节点。示例展示了如何将数组{30,20,10,25,15,40}调整为小堆{10,15,30,25,20,40}。代码实现了交换、向下调整和堆初始化功能,通过递归调整确保满足小堆性质。
2025-09-16 20:03:21
495
原创 4、二叉树
本文介绍了二叉树这一基本数据结构,包括其定义、特点、存储结构和基本操作。二叉树每个节点最多有两个子节点,常见类型有满二叉树、完全二叉树、平衡二叉树和二叉搜索树。存储方式包括链式存储和顺序存储。文章详细讲解了二叉树的创建、遍历、插入、删除等基本操作,并提供了先序、中序、后序遍历的递归实现代码示例。掌握二叉树结构及其应用是学习更复杂数据结构的重要基础。
2025-09-16 19:58:18
432
原创 06. Linux进程概念 1
本文介绍了Linux进程的核心概念。首先阐述了冯诺依曼体系结构,指出其五大组件(运算器、控制器、存储器、输入/输出设备)和存储程序原理。然后说明操作系统作为中间层,既管理硬件资源又为用户程序提供服务。重点讲解了进程概念,即正在执行的程序实例,操作系统通过task_struct结构体(PCB)描述和管理进程。最后通过fork()系统调用示例,展示了父子进程创建过程及写时复制机制。整体呈现了从计算机体系结构到进程管理的知识框架。
2025-09-15 19:11:16
1304
原创 05. Linux下的gdb调试
Linux GDB调试指南摘要 GDB是Linux下强大的C/C++调试工具。使用前需用gcc -g编译带调试信息的程序。常用命令包括:run运行程序、break设置断点、next/step单步执行、print查看变量值、backtrace查看调用栈。调试多线程程序可使用info threads和thread命令,分析崩溃可用gdb ./程序 core。掌握GDB能有效提升Linux开发调试效率。
2025-09-14 10:45:34
1248
原创 04. 完成Linux第一个小程序-进度条
本文介绍了Linux中的行缓冲区概念及其在终端进度条动画中的应用。行缓冲区是一种I/O缓冲机制,核心特点是遇到换行符或缓冲区满时才触发I/O操作。通过两个printf示例对比展示了行缓冲区的工作方式:带换行符的输出会立即显示,不带换行符的则会被缓冲。文章还详细解析了一个终端进度条动画的实现代码,该代码利用ANSI转义序列实现绿色进度条和旋转动画,并通过fflush(stdout)强制刷新缓冲区确保实时显示。最后提供了Makefile工程结构和编译说明,展示了完整的项目实现方式。
2025-09-12 18:41:50
1131
原创 03. Linux基础开发工具
文章摘要 本文介绍了Linux系统中的关键开发工具和概念。主要内容包括:1) yum软件包管理器的工作原理及配置;2) rz/sz文件传输工具的使用方法;3) Vim编辑器的三种模式及高效操作技巧;4) 程序编译的四个阶段(预处理、编译、汇编、链接);5) 动静态库的区别及命名规则;6) make工具与Makefile的基本使用。这些知识涵盖了Linux系统下的软件管理、文件操作、代码编辑和程序构建等核心开发技能,适合Linux开发者学习和参考。
2025-09-11 11:16:12
1141
原创 3、栈和队列
本文深入讲解了栈和队列这两种基础数据结构。栈具有后进先出(LIFO)特性,适用于函数调用、表达式求值等场景,可通过顺序存储(数组)或链式存储实现。队列具有先进先出(FIFO)特性,适合任务调度等应用,实现方式包括顺序队列、循环队列和链式队列。文章详细分析了各种实现方式的C语言代码,并比较了它们的优缺点。栈和队列作为程序设计中广泛使用的数据结构,理解其原理和实现有助于开发高效可靠的软件系统。
2025-09-11 07:55:10
1148
原创 02. shell命令以及Linux权限的理解
文章摘要 本文系统介绍了Linux权限管理体系,包含以下核心内容: Shell工作原理:作为用户与内核间的翻译层,解析并执行命令。 用户权限分级:区分root超级用户(#提示符)和普通用户($提示符),通过su切换用户,sudo临时提权需验证本用户密码。 权限管理机制: 文件类型通过首字符标识(如d目录、-普通文件) 三组rwx权限分别对应所有者、所属组和其他用户 chmod修改权限(符号/八进制格式) chown/chgrp变更属主/属组 umask反码机制决定默认权限 特殊概念:粘滞位限制目录删除权限,
2025-09-10 18:17:57
1529
原创 01. Linux中的常见指令介绍
本文介绍了Linux系统中常用的文件操作指令,包括目录与文件管理(ls、pwd、cd、mkdir、rm)、文件内容查看(cat、tac、more、less、head、tail)、文件操作(touch、cp、mv、find)、时间处理(date)、文本搜索(grep)以及压缩解压(tar)。重点讲解了各指令的常用选项和实用技巧,如使用管道连接命令、递归操作、权限处理等。这些基础指令是Linux系统管理和开发中必备的操作技能,掌握它们能有效提高工作效率。
2025-09-10 16:52:48
660
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅