自定义博客皮肤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)
  • 收藏
  • 关注

原创 C++10_vector模拟实现复习

本文通过模拟实现C++ vector,聚焦三个核心指针:_start、_finish、_end_of_storage,揭示其内存布局与接口设计的内在逻辑。从构造函数初始化空状态,到push_back扩容时机判断,深入剖析为何不能用memcpy(避免浅拷贝陷阱),详解insert后需重算位置以防止野指针,强调erase返回迭代器的必要性。通过resize复用、深拷贝技巧及initializer_list陷阱解析,揭示接口设计皆由内存安全驱动。最终指出:理解vector的本质,是掌握“指针相减”计算size/c

2026-11-04 19:35:28 94 4

原创 C++09_vector类复习

本文以10个核心问题为主线,系统解析C++ vector的底层机制:从基本概念、初始化方式、遍历方法,到size与capacity的区别、扩容策略(VS 1.5×,g++ 2×)、reserve与resize差异、中间增删的挪动原理、迭代器失效原因,直至二维vector的内存布局(含三指针结构)。通过“先会用、再懂扩容、最后看清对象结构”的递进逻辑,揭示vector作为动态数组的本质——连续内存、自动扩容、随机访问高效,但插入删除代价高,迭代器易失效。全文深入浅出,助读者摆脱“黑盒”认知,真正掌握其内存图景

2026-11-04 15:18:59 332 2

原创 进程控制_复制品的出生退场与收尸_第六篇

fork 通过写时拷贝创建子进程,父子各从返回一次。子进程获0,父进程获其PID。进程退出分三类:正常成功(退出码0)、失败(非0退出码)、异常终止(被信号杀)。exit 会清理缓冲区、关闭流,而 _exit 直接终止,不刷缓冲,易丢输出。子进程应使用 _exit 避免影响父进程。退出状态为16位位图,正常退出码在高8位,信号终止则在低8位。父进程必须 wait 收尸,否则子进程变僵尸。

2026-11-02 20:30:12 337 4

原创 C++01_入门基础复习

本文系统梳理C++入门八大核心语法点:后缀决定编译器前端、命名空间解决重名问题、cout依赖函数重载实现类型自动识别、缺省参数须从右向左连续、同名函数靠形参区分、引用与指针本质差异、inline仅为建议、NULL在C++中为0易引发类型混淆。结合实例解析编译流程与作用域机制,揭示语言设计背后的逻辑,助初学者快速建立清晰认知。

2026-11-02 19:44:39 156

原创 程序地址空间_每个进程都以为自己独占整台机器_第五篇

每个进程都以为自己独占4G地址空间,实则所有地址均为虚拟地址。通过页表映射,同一虚拟地址在不同进程间指向不同物理内存,实现隔离与共享。内核用mm_struct和vm_area_struct管理地址空间,fork采用写时拷贝优化内存使用。全局变量、字符串常量等因固定位置与权限位得以长期存在,而“4G”仅为编号上限,非实际内存占用。虚拟地址机制虽绕,却解决了安全、效率与灵活性难题。

2026-10-31 21:01:35 17 5

原创 命令行参数与环境变量_main的参数是哪来的_第四篇

上一篇的主角是"已经活着的进程"。这一篇把镜头往前挪一格,对准进程刚被拉起来的那一瞬间。主线一句话:这句话是整篇的地基。记住它,后面所有细节都只是在这句话上长出来的枝叶。问:先问一个听起来有点冒犯的问题—— 函数可以有参数吗?答: 有,而且是最常见的两个:1.1 也是"被调用"的很多人写过几百个 ,从没想过它跟普通函数有什么不同。其实没有本质区别:有函数名、有参数、有返回值、被人调用。唯一的特殊之处在于,调用它的不是你的代码,而是运行库(libc)里的启动代码。既然是"被调用",它当然可以有参数——那

2026-10-30 14:19:58 233 4

原创 调度_内核怎么在几微秒内挑出下一个进程_第三篇

下面这行 H1 是占位标题,你可以直接改成自己的文章标题。

2026-10-28 20:05:55 178 6

原创 C++ string 类复习:从会用到底层原理,一篇讲透

有没有一种既能共享又能不崩的拷贝?有,叫写时拷贝(Copy On Write,COW):先让多个对象共享同一份资源,只有谁要"写"(修改)时,才真正给他拷贝一份独立的。它的实现基础是浅拷贝 + 引用计数。

2026-10-21 20:46:18 360 7

原创 Linux:进程机制_从PCB到上下文切换_第二篇

一层是公平:范围有限,防止有人把优先级设到极端,把别人饿死。一层是权限:只有 root 能调负值,普通人只能让自己更谦让,不能让自己更霸道。还有一层是系统目标:分时系统追的是"大家都能推进",所以不需要拉得很开;实时系统追求"必须在期限内完成",策略就完全不同。

2026-10-20 19:28:17 412 34

原创 Linux:冯诺依曼体系结构到进程_第一篇

复习最怕的不是记不住,是知识点散成一地,串不起来。先看这条链:一路推到底,最后落在这一句上:这句话是上篇的终点,也是下篇的起点。问:平时说"电脑在算",到底是哪个部件在算?答: 这张图值得自己动手画一遍。看着简单,但它决定了后面所有结论。数据信号数据信号数据控制信号控制信号控制信号控制信号输入设备键盘 鼠标 摄像头 麦克风存储器(内存)输出设备显示器 打印机 喇叭运算器控制器图上有两样东西要看清:方框和箭头。先看方框,一共五个:输入设备(键盘、鼠标、摄像头、麦克风)、输出设备(显示器、打印机、喇叭)、存储器

2026-10-20 09:52:49 1540 44

原创 Linux 基础指令速查:从 ls 到 tar 的常用命令全解析

目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目录,即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)。而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

2026-10-06 13:41:12 1923 57

原创 C++入门到精通:内存管理全方位解析

本篇文章将带你了解new和delete运算符,以及它们的实现原理。那么话不多说,直接开始吧。malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。malloc和free是函数,new和delete是操作符malloc申请的空间不会初始化,new可以初始化malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可,如果是多个对象,[]中指定对象个数即可。

2026-10-01 19:35:29 251 57

原创 C++入门到精通:类和对象(下)全方位解析

本篇文章将是类和对象的最后一篇文章了,那么话不多说,直接开始吧。

2026-09-27 14:57:45 365 66

原创 C++入门到精通:类和对象(中)全方位解析

在上一篇文章中,我们已经初步认识了 C++ 的类和对象。今天,我们将继续深入探索类的更多奥秘。准备好了吗?让我们直接开始吧!

2026-09-25 14:25:09 832 61

原创 C++入门到精通:类和对象(上)全方位解析

你是否曾好奇过,为什么 C++ 中 struct 和 class 都能定义类?它们之间到底有什么区别?类又是如何在内存中"活"起来的?如果你对这些问题感到困惑,那么这篇文章正是为你准备的。类的定义与访问限定符:掌握 public、private、protected 的用法与区别;inline 的奥秘:了解它如何提升性能,并为编译器创造更多优化空间;类域与作用域:理解 :: 作用域操作符的作用;类实例化与内存布局:弄清对象在内存中如何分配空间、大小如何计算;this 指针。

2026-09-24 00:00:00 390 7

原创 C++ 核心语法速过:命名空间、引用、函数重载与 nullptr 深度解析

本篇文章将讲解C++中的命名空间、引用、函数重载、nullptr,话不多说,直接开始吧namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以上面这种类似的问题就能解决了。定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等。

2026-09-05 00:00:00 393 9

原创 【数据结构】别再被“假溢出”折磨了!一文彻底搞懂循环队列的底层逻辑与C语言实现

本篇文章将带你了解队列基本概念、基本操作。这篇文章将带你全部搞懂。int* a;// 指向数组的指针int front;// 指向对头int rear;// 指向队尾的下⼀个位置int N;// 空间⼤⼩,队列⻓度为N-1。

2026-08-28 21:21:47 259 24

原创 一文带你搞懂:函数栈帧的创建与销毁

本篇文章将会带你搞懂函数栈帧的创建与销毁,会说明函数栈帧有什么用,并且能够更好理解:局部变量是如何创建的?为什么局部变量不初始化内容是随机的?函数调用时参数是如何传递的?传参的顺序是怎样的?函数的形参和实参分别是怎样实例化的?函数的返回值是如何带回的?以及理解函数栈帧能解决什么问题?这些问题都将一一解决。那么话不多说。我们在写C语言代码的时候,经常会把一个独立的功能抽象为函数,所以C程序是以函数为基本单位的。那函数是如何调用的?函数的返回值又是如何带回的?函数参数是如何传递的?

2026-08-28 16:34:26 495 43

原创 一文搞定C语言栈:手把手教你写出健壮的入栈、出栈与内存销毁

那么本篇文章将带你深入了解栈,并一步步实现栈的相关操作,这篇文章将带您彻底搞懂栈,那么少的不说,多的不唠。

2026-08-26 20:52:45 251 4

原创 深入浅出:彻底搞懂双向链表的核心原理与实现

本文介绍了带头双向循环链表的实现方法。相比单链表,其优势在于通过头节点的prev指针快速定位尾节点(O(1)复杂度),以及在任意节点前插入/删除操作的高效性。文章详细讲解了链表结点的创建(包含数据、前后指针和长度计数器)以及关键操作的实现:初始化时头节点自循环;销毁时循环释放所有节点;打印时遍历输出。重点说明了头插/尾插操作的四步指针调整流程,以及头删操作的边界检测和指针重定向过程。所有操作都配有清晰的代码实现和对应的流程图解,突出展示了双向循环链表在指针操作上的对称性和高效性。

2026-08-12 14:38:35 260 10

原创 从零手写单链表:基础精讲带你吃透链表逻辑

本文将基础精讲单链表,那么话不多说,Let’s go。

2026-07-21 21:36:40 264 10

原创 一文搞懂顺序表:定义、增删改查、时间复杂度分析

这篇文章将带着你搞懂顺序表的定义、增删改查、时间复杂度分析,那么话不多说直接开始吧。Let’s go <-- 这么能串(OVO)。顺序表是⽤⼀段物理地址连续的存储单元依次存储数据元素的线性结构,⼀般情况下采⽤数组存储。由此可知,顺序表在逻辑结构和物理结构上都是连续的。那么顺序表和数组有什么区别呢?区别在于顺序表多了增删改查的操作,能够灵活调整长度,而数组长度通常是固定的,当然也有动态数组,但灵活性不如顺序表。

2026-06-21 21:54:33 418 9

原创 深度解析:C语言动态内存管理

本文将深度解析C语言中的动态内存管理,包含malloc,realloc,calloc和一些常见的动态内存错误,以及关于柔性数组的一些知识。好的,那么话不多说我们一起来揭开它神秘的面纱吧OVO。

2026-06-15 22:14:08 348 2

原创 自定义类型:联合和枚举

在之前我们已经提到,自定义类型之一结构体,那么这篇文章将讲解剩下的自定义类型联合和枚举。联合体的定义方式与结构体类似,也有三种。1.先声明后定义union Unchar a[5];int b;union Un c;2.同时声明和定义union Unchar a[5];int b;}u;3.直接定义unionchar a[5];int b;}u;

2026-05-19 21:12:47 484 15

原创 自定义类型基础精讲:结构体

在之前我们学习了指针的基本内容,现在我们学习自定义类型:结构体、联合、枚举。在之前我们已经知道了许多int,char,double…等等,还知道了由同类型元素组成的数组,还学了存放上述类型变量地址的指针,我们可以利用这些去解决许多问题了,但在实际应用中,例如学校学生的信息管理,我们若只利用上述知识,只能将学生的各种信息分别单独定义,这样是不能够系统管理信息的,信息会非常杂乱,这时候结构体的作用就体现出来了,能够将多种不同类型的变量集合在一起,这样我们在实际中对于信息的管理就方便许多了,

2026-05-14 19:52:12 7848 15

原创 深入理解指针,指针基础精讲:为什么指针是C语言的灵魂(下)

在上篇文章我们已经讲了指针的一些相关概念及相关运用,那么这一篇将是对指针最后的介绍,将着重讲解指针与数组相关的内容以及指针与函数结合的内容。

2026-04-30 09:09:20 451 7

原创 深入理解指针,指针基础精讲:为什么指针是C语言的灵魂(上)

C语言中指针是理解和使用C语言的关键部分,它们提供了对内存的直接访问的能力,本文系统梳理了指针相关部分的内容,由于内容过多,将分成两部分来写,若有错误的地方和没有描述到的,还请不吝赐教。

2026-04-20 12:39:17 504 12

原创 函数和数组实现简易扫雷游戏

那么这个时候呢我们要将雷和非雷的信息存储在另一个棋盘上(mine),雷的个数信息存储在另一个棋盘上(show),在mine数组中排查雷,将排查出雷的个数的信息存储在show数组中,并且打印show数组为后续排查提供参考。我们在排查棋盘边界内的格子的信息的时候,会访问周围8个位置的雷的个数,那如果我们要排查的是棋盘边界的位置呢?(1)在扫雷过程中,布置的雷和已经排查出的雷的信息需要存储,所以需要一定的数据结构来存储这些信息,我们要设置的是9*9的棋盘,所以我们可以用9*9的二维数组来实现。

2026-04-11 21:40:02 643 3

空空如也

空空如也

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

TA关注的人

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