自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 虚拟地址空间

本文回顾了程序虚拟地址空间的概念,通过六个核心问题深入探讨了其工作原理。虚拟地址空间通过mm_struct进行动态区域划分,由vm_area_struct(VMA)链表管理,每个进程拥有独立的虚拟地址空间和页表。系统创建进程时先初始化PCB和mm_struct,通过缺页中断机制按需加载代码数据到物理内存。虚拟地址空间的作用包括:实现地址有序化管理、提供内存保护机制(如拦截非法访问)、解耦进程与内存管理。文章还解释了挂起机制和malloc的实现原理,阐明了父子进程共享虚拟地址但物理地址不同的现象源于写时拷贝机

2025-12-03 12:14:20 337

原创 系统环境变量

环境变量是操作系统中用于指定运行环境的全局参数,如PATH、HOME等。它们以字符串形式存储在系统内,帮助程序查找资源(如库文件)和执行命令。在命令行中可通过echo、export等命令查看或设置环境变量。程序启动时可通过main函数的参数或environ变量获取环境变量。环境变量与本地变量不同,具有全局性且可被子进程继承。值得注意的是,export等内建命令由bash直接执行而非创建子进程,因此能修改父进程的环境变量。理解环境变量对系统管理和程序开发具有重要意义。

2025-12-01 22:39:20 571 3

原创 Linux进程切换与调度

本文主要探讨了进程优先级和进程切换的相关概念。进程优先级决定了CPU资源的分配顺序,数值越小优先级越高。进程具有竞争性、独立性和并发性等特点。进程切换涉及寄存器操作和时间片分配,分时操作系统通过快速切换实现多任务并发执行的假象。实时操作系统则需等待当前进程完全执行完毕。Linux系统采用O(1)调度算法和每个CPU一个运行队列的方式实现进程调度。这些机制确保了系统资源的合理分配和高效利用。

2025-12-01 00:11:24 512 4

原创 linux进程状态

本文介绍了Linux进程的状态分类和运行机制。进程主要分为运行、阻塞和挂起三种状态:运行状态指进程在调度队列或被CPU执行;阻塞状态是进程等待资源就绪;挂起状态则是内存不足时将进程数据暂存磁盘。Linux系统具体定义了7种进程状态标识:R(运行)、S(可中断睡眠)、D(不可中断睡眠)、T(暂停)、t(调试暂停)、X(死亡)和Z(僵尸)。其中僵尸状态(Z)会导致内存泄漏问题,但普通进程退出后系统会自动回收内存。为提高效率,系统会复用已释放进程的task_struct结构体。文章还解释了D状态的必要性,即在磁盘

2025-11-29 23:34:16 944 1

原创 Linux进程

本文摘要: 文章主要介绍了计算机系统的基本架构和工作原理。首先阐述了冯·诺伊曼体系结构的核心特点,包括分级存储、数据流动方式等,解释了软件加载的本质是将程序从磁盘拷贝到内存。其次详细介绍了操作系统的概念、功能和设计目的,通过"先描述,再组织"的管理理念,说明了操作系统如何通过数据结构管理软硬件资源。最后重点讲解了进程的概念,包括进程控制块(PCB)的结构和作用,子进程的创建机制以及写时拷贝技术。文章通过大量实例,如银行服务、学校管理等,生动形象地解释了计算机系统的工作原理和管理机制。

2025-11-27 14:16:36 1096

原创 git && gdb/cgdb

本文摘要主要介绍了Git版本控制系统和GDB/CGDB调试工具的使用方法。Git部分说明了其分布式版本控制特性,介绍了本地和远程仓库管理,以及基本操作命令如clone、add、commit、push等。GDB/CGDB部分重点讲解了Linux下的程序调试技术,包括调试模式设置、断点管理、代码执行控制、变量监视等核心调试命令。这两部分内容为开发者提供了代码版本管理和程序调试的实用技术指南,涵盖了从基础概念到具体操作的完整流程。

2025-11-27 14:13:19 315

原创 Makefile

Makefile是用于自动化编译的规则文件,通过定义源文件的编译顺序和依赖关系来提高开发效率。它支持多种功能操作,只需执行make命令即可完成编译。Makefile的格式包括执行规则、时间戳管理(.PHONY作用)和推导规则等。在实际应用中,Makefile能有效管理多目录下的源代码编译流程,是工程开发中广泛使用的编译方法。

2025-11-26 21:37:40 239

原创 gcc && g++ && 编译 &&初识动静态库

摘要:本文介绍了编译过程的四个阶段(预处理、编译、汇编、链接)及GCC/G++编译器选项(-E、-S、-c)。重点对比了动态库和静态库的区别:动态库通过地址共享代码,仅加载一次到内存;静态库则拷贝到每个文件,可能造成内存浪费。编译命令示例包括从源代码到不同中间文件的转换(.i/.s/.o),最终生成可执行文件。(149字)

2025-11-25 22:22:00 298

原创 yum & vim

Linux软件安装主要有源码、软件包和包管理器三种方式,其中包管理器(如yum/apt)最推荐,能自动解决依赖问题。Vim作为多模式编辑器,包含命令、插入和底行模式,可通过配置.vimrc文件实现个性化设置,如自动缩进、行号显示等。

2025-11-24 20:06:10 306

原创 Linux权限

Linux权限系统通过角色(拥有者、所属组、其他)和目标属性控制用户行为。权限限制的是角色对目标的操作能力,root用户不受约束。目录权限中,r控制查看内容,w控制新建文件,x控制进入目录。文件删除权限取决于所在目录的w权限。通过chmod、chown等命令可修改权限,umask用于设置默认权限屏蔽位。粘滞位可保护共享目录中用户文件不被他人删除。权限机制实现了多用户间的安全隔离。

2025-11-21 12:43:58 387

原创 Linux基础知识及指令

本文介绍了Linux系统的核心知识点和常用指令。主要内容包括:1) Linux文件系统特点,强调"一切皆文件"理念,通过文件开头字符区分文件类型(-/d/c/b/l/p);2) 重要概念如重定向、管道和Unix时间戳;3) 常用文件操作指令(mv/cat/more/less/head/tail)及其选项;4) 系统管理指令(date/cal/find/which)的使用方法。重点说明了查看文件的多种方式及时间相关操作,为Linux基础操作提供了实用指导。

2025-11-14 16:35:17 841

原创 linux指令

本文介绍了Linux系统的基础知识和常用指令。主要包括:文件系统结构(多叉树形式)、绝对/相对路径、家目录等概念;ls、pwd、cd、touch、mkdir、rm等基本文件操作指令;通配符*的应用场景(批量操作文件);历史命令调取方法等实用技巧。特别强调了rm -rf指令的危险性,并介绍了man帮助指令的使用。这些内容为Linux初学者提供了系统操作的基本框架和常用命令参考。

2025-11-13 21:14:29 610

原创 C++异常

本文介绍了C++异常处理机制的基本概念和使用方法。异常处理通过抛出对象实现问题检测与处理的分离,相比C语言的错误码方式更灵活。文章详细阐述了异常抛出、捕获、栈展开等过程,以及类型匹配规则。通过示例代码展示了继承体系下的异常类设计和使用,包括重新抛出异常、异常安全问题及处理方法。同时介绍了异常规范(noexcept)的使用,并指出编译器对异常声明的处理特点。异常处理机制能有效分离错误检测和处理逻辑,是大型项目开发中常用的错误管理方式。

2025-11-05 17:39:41 955

原创 C++11

本文介绍了C++11中的三个重要特性:可变参数模板、新的类功能和lambda表达式。 可变参数模板支持可变数量参数的函数和类模板,包括模板参数包和函数参数包。文章详细说明了包扩展机制、emplace系列接口及其高效性实现原理。 新的类功能包括默认移动构造/赋值、成员变量缺省值声明、default/delete控制默认函数生成等特性。文章阐述了编译器自动生成移动操作的规则和限制。 lambda表达式部分详细讲解了其语法结构、捕捉列表的三种方式(显式/隐式/混合)、应用场景及底层实现原理(转换为仿函数类)。最后

2025-11-03 10:17:23 1314

原创 C++11(一)

本文主要探讨C++11引入的列表初始化和右值引用两大特性。在列表初始化方面,C++11统一了初始化方式,支持使用{}进行初始化,并引入std::initializer_list类来简化容器初始化。右值引用部分详细分析了左值/右值概念,右值引用的语法特性及其在移动语义中的运用,包括移动构造、移动赋值的实现原理,以及如何通过右值引用提高传值返回效率。文章还探讨了引用折叠规则和完美转发的机制,展示了这些特性如何优化参数传递和资源管理。这些改进显著提升了C++在资源管理和性能优化方面的能力。

2025-10-30 23:06:20 837

原创 C++多态

多态是面向对象编程的重要特性,分为编译时多态(函数重载、模板)和运行时多态(虚函数机制)。实现多态需要满足:基类指针/引用调用虚函数,且派生类完成虚函数重写。虚函数通过虚函数表实现动态绑定,派生类虚表包含继承、重写和新增的虚函数地址。析构函数建议声明为虚函数以避免内存泄漏。C++11引入override和final关键字辅助虚函数重写控制。纯虚函数(=0)使类成为抽象类,强制派生类实现。多态原理是运行时通过对象虚表查找对应函数地址,实现不同对象调用相同函数产生不同行为。虚函数表通常存储在代码段(常量区)。

2025-10-15 20:28:22 949

原创 C++继承

文章摘要: 本文系统介绍了C++继承机制,包括继承概念、访问控制规则、基类派生类转换、作用域隐藏规则等核心内容。重点分析了派生类默认成员函数的生成规则,探讨了多继承及菱形继承问题,比较了虚继承解决方案。最后对比了继承(is-a)与组合(has-a)的差异,指出组合具有更低耦合度,建议优先使用组合,但实现多态仍需继承。全文深入剖析了继承体系的实现原理和使用规范,为面向对象程序设计提供了重要指导。

2025-10-14 22:47:54 983 9

原创 C++函数模板

本文介绍了泛型编程中函数重载的局限性,以及函数模板和类模板的解决方案。函数重载存在代码复用率低、维护性差的问题。函数模板通过参数化类型实现代码复用,编译器根据实际类型生成特定版本。文章详细说明了函数模板的格式、原理、实例化方式(隐式和显式)及匹配规则。同时介绍了类模板的定义格式和实例化特点,强调类模板必须显式实例化才能使用。模板技术将重复工作交给编译器,提高了代码的通用性和可维护性。

2025-09-20 16:15:09 495 1

原创 C/C++内存管理

本文主要介绍了C/C++中的内存管理机制。系统内存分为栈、堆、数据段等不同区域,各自承担特定功能。C语言使用malloc/free进行动态内存管理,而C++引入了new/delete操作符,能够自动调用构造/析构函数。new底层通过operator new实现,最终仍调用malloc分配内存,但增加了异常处理机制。文章对比了malloc/free和new/delete的六大区别,包括初始化方式、类型检查、失败处理等关键差异。对于自定义类型,new/delete能自动完成对象生命周期管理,这是其优于C语言内存

2025-09-19 21:50:18 653

原创 C++类和对象(中)

本文介绍了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值运算符重载等。重点分析了这些函数的特点、使用场景以及编译器自动生成时的行为:构造函数用于对象初始化;析构函数负责资源清理;拷贝构造函数实现对象拷贝;赋值运算符重载完成对象间的赋值操作。文章指出对于管理资源的类(如包含动态内存),需要自定义这些函数实现深拷贝,而对于简单类则可以使用编译器生成的默认版本。此外还简要介绍了运算符重载规则和const成员函数的概念,强调了这些默认成员函数在面向对象编程中的重要性。

2025-09-17 20:08:03 1318

原创 C++:类和对象(上)

本文主要介绍了C++中类的定义、实例化和this指针等核心概念。首先说明了类定义的基本格式,包括成员变量和成员函数的声明方式,以及访问限定符(public/protected/private)的作用。其次讲解了类实例化的概念,指出类本身不占内存空间,实例化对象才会分配物理空间,并分析了对象的内存对齐规则。然后介绍了this指针的隐式传递机制,解释了成员函数如何区分不同对象。最后对比了C++和C语言实现栈的差异,强调了C++封装特性带来的安全性和便利性。全文系统阐述了C++面向对象编程的基础知识

2025-09-15 20:01:10 1110

原创 C++基础操作第二期

本文摘要:C++中的引用主要用于传参和返回值以减少拷贝开销,const引用需注意权限控制。指针和引用各有特点:引用是别名必须初始化且不可改变,指针需解引用但可改变指向。内联函数(inline)用于优化短小频繁调用的函数,替代C的宏函数,但不宜声明定义分离。C++11引入nullptr作为安全空指针,避免类型转换问题。这些特性共同提升C++的效率和安全性。(149字)

2025-09-13 23:58:59 412

原创 C++基础操作第一期

C++在兼容C语法的基础上进行了多项改进:1)引入命名空间(namespace)解决命名冲突问题;2)提供更便捷的输入输出流(cin/cout);3)支持缺省参数(全缺省和半缺省);4)允许函数重载(参数类型或数量不同);5)新增引用类型(变量别名,共享内存)。这些特性增强了代码组织性和灵活性,其中命名空间和引用是C++独有的重要概念。实际项目中建议避免全局展开std命名空间,而应指定使用特定成员。

2025-09-10 21:00:30 602

原创 C语言数组实现堆:高效二叉树应用指南

本文介绍了使用C语言数组实现堆数据结构的方法及其在二叉树中的应用。重点阐述了数组表示完全二叉树的优势,包括高效访问和空间利用率。详细讲解了堆的初始化、插入、删除等核心操作实现,并提供了堆排序的具体应用示例。文章分析了数组实现堆的优缺点,建议采用动态数组和索引优化等策略提升性能。针对C语言开发者和算法学习者,本文为处理优先级队列和排序问题提供了实用解决方案,展现了数组实现堆在性能关键场景中的价值。

2025-08-29 12:00:00 522

原创 C语言链表实现队列全解析

本文介绍了C语言中使用链表实现队列的方法。队列作为FIFO(先进先出)数据结构,其链表实现克服了数组固定大小的限制,提供动态内存管理。文章详细讲解了队列节点结构设计、入队(O(1)时间)、出队(O(1)时间)等核心操作,并提供了完整的C代码实现,包括初始化、销毁等辅助函数。分析表明,链表队列虽存在额外指针开销,但具有动态扩展优势,适合任务调度等场景。最后建议在实际项目中优先采用链表实现,同时推荐探索循环队列等其他实现方式。

2025-08-28 12:00:00 497

原创 栈结构详解:从理论到实现

本文介绍了栈数据结构及其实现方式。栈作为一种后进先出(LIFO)的线性结构,核心操作包括Push(入栈)和Pop(出栈)。文章详细阐述了基于数组的栈实现方案,包括初始化、容量检查、入栈出栈等基本操作,以及获取栈顶元素、判空等扩展功能。重点说明了动态扩容机制通过realloc实现,时间复杂度为O(1)。最后提供了完整的Stack.h和Stack.c代码示例,涵盖栈结构定义、边界条件处理(栈空/满判断)和内存管理(销毁)等关键实现细节。

2025-08-27 12:00:00 218

原创 单链表从入门到精通

单链表是一种由节点组成的线性数据结构,每个节点包含数据域和指向下一节点的指针。本文详细介绍了单链表的C语言实现:1)定义节点结构体;2)实现常见操作(头插、尾插、指定位置插入、删除节点);3)内存管理方法(malloc/free);4)遍历查找等辅助功能。分析了单链表的优缺点:支持动态扩展和高效插入(O(1)),但随机访问较慢(O(n))。特别强调了内存泄漏防护和边界条件处理的重要性,并推荐通过算法题巩固学习。适合作为单链表的入门参考。

2025-08-26 14:20:42 818

原创 C语言顺序表:从原理到实战优化

本文详细介绍了C语言中顺序表的实现原理与技术要点。顺序表作为线性表的顺序存储结构,具有连续内存存储和随机访问特性,适用于高频查询场景。文章对比了静态分配和动态分配两种实现方式,重点阐述了动态分配的优势。核心内容包括:初始化与销毁、插入删除操作(尾部O(1)、头部O(n))、动态扩容策略(成倍增长)等关键算法实现。性能分析表明顺序表具有CPU缓存友好性,但需避免频繁中间插入操作。文章通过代码示例展示了各操作的实现细节,为开发者提供了从原理到实践的完整指导。

2025-08-23 17:29:56 916 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除