- 博客(41)
- 收藏
- 关注
原创 C++ 匿名函数 lambda
C++ Lambda匿名函数是一种即用即丢的临时函数,主要用于简化代码和提高可读性。其核心特性包括:1)灵活的捕获机制,支持值捕获、引用捕获和混合捕获;2)可省略返回类型的自动推导;3)作为STL算法回调时的便利性。Lambda通过捕获子句直接访问外部变量,避免了普通函数需要传参的繁琐。相比普通函数,Lambda更适合一次性使用场景,能有效减少命名污染和代码割裂问题。使用时需注意引用捕获的生命周期风险和值捕获的拷贝特性。C++14后还支持泛型Lambda和移动语义捕获等进阶特性。
2026-01-08 02:51:34
300
原创 Linux进程间通信-超级合集
Linux进程间通信(IPC)机制主要包括四类:传统Unix IPC(管道、信号)、SystemV IPC(共享内存、消息队列、信号量)、POSIX IPC(改进版SystemV IPC)和套接字。管道分为匿名管道(父子进程间单向通信)和命名管道(任意进程间通信),前者轻量但局限,后者通过文件系统实现跨进程通信。SystemV IPC提供高性能内核对象,共享内存无数据拷贝最快但需同步,消息队列支持结构化数据传输,信号量用于进程同步。POSIX IPC接口更简洁,支持跨平台。套接字支持本地和网络通信,灵活但性
2026-01-08 01:49:11
520
原创 C++ 智能指针 --- 草履虫也能轻松看懂
智能指针基于,自动管理堆内存,核心解决裸指针的内存泄漏问题:把堆内存的生命周期绑定到栈上的智能指针对象,当智能指针对象超出作用域时,析构函数会自动释放绑定的堆内存,无需手动delete。C++ 中的裸指针(deletedeletedelete。
2026-01-08 01:21:51
427
原创 C++泛型--模版--全解析-- 草履虫也能看懂!
C++模板全解析:泛型编程的核心机制 摘要:C++模板是泛型编程的核心,通过将类型/常量作为参数传递给函数/类,实现代码复用和类型安全。主要分为函数模板和类模板,支持特化、偏特化、可变参数等高级特性。函数模板可自动推导类型参数,类模板需显式实例化。模板特化(全特化和偏特化)允许为特定类型定制实现。可变参数模板支持任意数量参数。非类型模板参数可传入常量值。模板广泛应用于STL容器、算法等场景,是编写高效通用代码的关键。需注意模板的编译模型、代码膨胀等问题。
2026-01-08 00:40:20
334
原创 业务流程再造(BPR)及相关管理体系_CN
定义:BPR 是一种战略型管理方法,通过对核心业务流程进行根本性再思考、彻底性再设计(非局部修改),依托跨职能团队协作与有效变革管理,实现组织绩效的显著提升核心目标:聚焦四大关键指标 —— 成本降低、质量提升、服务优化、速度加快,最终增强客户满意度与企业竞争优势核心价值:精简冗余流程、降低运营成本、提升产出品质、对齐客户需求、打造敏捷组织、淘汰低效环节定义:全组织范围的管理方法,聚焦产品、服务与流程的持续改进,实现长期客户满意度,需从 CEO 到一线员工全员参与质量量化公式。
2026-01-04 18:49:56
697
1
原创 不可重入函数Non-Reentrant & 可重入函数Reentrant
摘要:可重入函数和不可重入函数的本质区别在于是否依赖外部状态。可重入函数像自动售货机,执行过程被打断后仍能正确运行,因为它只使用参数和局部变量(如memcpy、write)。不可重入函数像手工记账本,依赖全局状态(如strtok用静态变量保存分割位置),一旦在信号处理或多线程中被重入就会数据错乱。关键差异在于:可重入函数不使用全局变量、共享资源,只进行原子操作;不可重入函数则相反。在信号处理和多线程编程中必须使用可重入函数,避免调用printf、malloc等不可重入函数,否则会导致内存泄漏或程序崩溃。
2026-01-02 21:15:39
682
原创 Linux---内核态&用户态
摘要: 内核态与用户态的区分旨在实现权限隔离与系统安全。用户态(Ring3)限制程序仅能执行普通指令,访问自身用户空间;内核态(Ring0)允许特权指令和硬件操作,管理全局资源。切换通过系统调用、中断或异常触发,伴随CPU特权级变更和现场保护,开销较大。底层依赖CPU特权级(x86的Ring0/3)和虚拟地址空间划分(用户/内核空间独立映射)。用户级页表为进程私有,确保隔离;内核级页表全局共享,统一管控资源。优化策略包括减少系统调用、批量操作和TLB命中率提升,以降低切换开销。典型问题如段错误、内核崩溃等可
2026-01-02 20:03:56
723
1
原创 Linux进程通信---7---中断
Linux中断机制是操作系统处理硬件事件和程序异常的核心机制,分为硬中断(硬件触发)、软中断(内核触发)和异常(程序触发)三类。硬中断处理流程包括中断触发、CPU响应、现场保护、执行中断服务程序(上半部分快速处理)和触发延迟任务(下半部分耗时处理)。Linux采用"上下半机制"优化中断处理,上半部分在关中断状态下快速完成,下半部分通过软中断、Tasklet或工作队列在开中断状态下处理耗时任务。关键组件包括中断控制器、中断向量表和中断描述符,管理接口提供中断注册和释放功能。时钟中断作为周期
2026-01-02 18:46:40
841
原创 Linux进程通信---6---信号
场景 1:优雅退出进程捕获,不是直接退出,而是先:① 关闭打开的文件句柄;② 保存内存中的数据到磁盘;③ 释放网络连接;④ 再退出。实战:数据库服务、Web 服务(如 Nginx)收到SIGTERM时,会先停止接收新请求,处理完已有请求后再退出。场景 2:紧急备份进程捕获SIGINT(2)(Ctrl+C),执行 “紧急备份” 逻辑(比如把临时数据写入文件),再终止。场景 3:实时信号传少量数据用实时信号(SIGRTMINSIGRTMAX。
2026-01-02 16:11:19
1099
2
原创 Linux进程通信---6.1---进程信号屏蔽
Linux信号屏蔽机制解析:进程通过设置信号屏蔽字(SignalMask)临时阻止特定信号处理,内核将信号存入pending表待后续处理。核心函数sigprocmask支持添加/解除/替换屏蔽规则,需配合sigset_t位图操作。关键点包括:仅可屏蔽非SIGKILL/SIGSTOP信号、屏蔽不影响信号处理方式、非实时信号会合并处理。典型应用场景包括保护临界区代码、避免非异步安全函数重入及实现优雅退出。该机制通过将异步信号转为可控处理,有效保障程序稳定性,是多进程编程的重要技术。
2026-01-01 23:52:16
1042
1
原创 C/C++结构体超详细讲解
本文全面介绍了C/C++中结构体(struct)的核心概念和使用方法。主要内容包括:1)结构体的基本定义和声明方式;2)C与C++结构体的关键区别,如成员函数、访问控制等;3)结构体成员的访问和初始化方法;4)内存对齐规则及其重要性;5)结构体嵌套、函数参数传递等进阶用法;6)C++中结构体的扩展特性,如构造函数、继承、运算符重载等面向对象功能。文章通过大量代码示例详细说明了结构体的各种应用场景,并对比了结构体与类(class)的异同,是学习结构体编程的实用指南。
2025-12-31 17:49:56
1055
原创 Linux进程通信---4---信号量System V & POSIX
信号量是 Linux 内核维护的原子性计数器 + 等待队列同步:控制进程 / 线程的执行顺序(比如 A 必须等 B 完成后再执行);互斥:保护共享资源(如共享内存、打印机)不被并发修改。System V 信号量是Linux/Unix 内核提供的进程间通信(IPC)机制,属于 System V IPC 家族(另外两个是共享内存、消息队列),核心作用是实现多进程间的同步与互斥,保护「临界资源」(如共享内存、打印机、标准输出)不被多个进程同时访问,避免数据竞争或操作混乱。特性System V 信号量。
2025-12-31 14:26:17
631
原创 Linux进程通信---5---System V 消息队列
SystemV消息队列是Linux/Unix系统中重要的进程间通信机制,采用内核维护的带类型消息链表实现结构化数据传输。核心特点包括:消息类型化支持按类型读取、内核持久化、全双工通信及原子操作。相比命名管道,它支持结构化消息传输和优先级读取;与共享内存相比,虽性能略低但无需额外同步。主要操作函数包括msgget()创建队列、msgsnd()发送消息、msgrcv()接收消息和msgctl()控制队列。
2025-12-30 21:06:56
1082
原创 Linux进程通信---3---System V 共享内存
System V 共享内存是性能最高的 IPC 机制,核心是 “内核物理内存映射到进程虚拟地址空间”,实现零拷贝数据共享;ftok()生成键值 →shmget()创建 / 获取段 →shmat()映射到进程空间 → 读写数据 →shmdt()解除映射 →删除段;关键要点:必须配合信号量 / 互斥锁实现同步,避免竞态条件;内存大小按页对齐,按需申请避免浪费;用完必须调用,防止内核资源泄漏;现代开发中,POSIX 共享内存(shm_openmmap。
2025-12-30 20:41:53
1714
1
原创 Linux进程通信---2---命名管道
命名管道(FIFO)是Linux系统中特殊的进程间通信机制,通过文件系统路径标识,支持无亲缘关系进程通信。与匿名管道相比,FIFO具有文件系统实体、手动管理生命周期等特点。其核心特性包括先进先出、半双工通信和内核缓冲。实现上依赖inode和pipe_inode_info内核结构,通过环形缓冲区进行数据传输。创建方式包括mkfifo命令和系统调用,支持阻塞/非阻塞模式。读写操作需注意原子性(PIPE_BUF限制)和SIGPIPE信号处理。典型应用包括日志收集、命令行工具协作和客户端-服务器模型.
2025-12-30 20:25:04
821
原创 Linux进程通信---1---匿名管道
匿名管道(Pipe)是Linux/Unix系统中用于亲缘进程间通信的IPC机制,通过pipe()系统调用创建。它包含读端和写端两个文件描述符,实现单向字节流传输。使用时父进程创建管道后fork子进程,通过关闭不需要的端形成单向通信链路。管道采用内核环形缓冲区,默认大小4KB,具有阻塞特性和引用计数管理。优点在于简单高效,缺点是仅支持亲缘进程且为半双工通信。典型应用包括进程池任务分发和命令行管道操作(如ls|grep)。底层通过内核数据结构pipe_inode_info管理缓冲区和引用计数,确保通信可靠性。
2025-12-30 20:18:24
1224
原创 Linux Makefile 完全教学:从入门到精通
摘要:本文系统介绍了Linux下Makefile的编写与应用。从基础概念入手,详细讲解了Makefile的核心语法、变量定义、自动推导规则和依赖关系管理。通过单文件到多文件项目的实战案例,展示了如何高效组织C/C++项目编译流程。文章还涵盖高级技巧如目录分离、条件编译、依赖管理,以及常见问题解决方法。Makefile作为自动化编译工具,能显著提升开发效率,通过合理设计编译规则实现智能依赖检查和增量编译,是Linux开发必备技能。掌握本文内容可满足90%的C/C++项目构建需求。
2025-12-23 17:54:23
704
原创 进程虚拟地址空间(Virtual Address Space, VAS)深度解析
进程虚拟地址空间操作系统为每个进程提供的「抽象内存视图」,是一组连续的、从 0 开始的地址(比如 x86 架构是 0~4GB,x86-64 是 0~128TB);进程所有的内存操作(读写变量、调用函数、打开文件)都基于这组虚拟地址,而非直接操作物理内存;每个进程的虚拟地址空间是完全独立的:进程 A 的虚拟地址0x1000和进程 B 的0x1000可以映射到不同的物理内存页,互不干扰。虚拟地址空间是 “地址范围”,不是实际内存;物理内存是 “存储介质”,虚拟地址需通过内核映射才能访问物理内存。
2025-12-22 00:22:15
902
原创 页表(Page Table)深度解析:虚拟地址映射的核心字典
实现地址虚拟化:将进程的虚拟地址精准映射到物理地址,屏蔽物理内存的分布细节;保障隔离与安全:通过独立页表和控制位,实现进程间内存隔离和权限控制;优化内存效率:结合缺页中断实现按需加载,结合多级页表减少页表内存占用;提升访问性能:通过 TLB 缓存和大页,降低地址转换的时间开销。虚拟地址空间提供了进程的 “内存假象”(连续、独立);页表将这份 “假象” 落地为物理内存的实际映射;MMU 和 TLB 则为映射提供了硬件级别的高效支持。
2025-12-21 23:37:48
730
原创 Linux ELF 详解:从定义到底层原理
ELF 是 Linux 系统底层的「二进制文件标准」,其核心价值在于统一链接和加载的接口对开发者:编译(gcc)生成.o目标文件,链接(ld)生成可执行文件 / 共享库,无需关注底层格式细节。对系统:加载器(内核)和动态链接器()通过 ELF 头部和表结构,标准化地完成程序加载和运行。理解 ELF 的结构和流程,是深入掌握 Linux 程序运行原理、动态链接、调试崩溃问题的关键基础。建议结合readelfobjdump工具实际分析一个简单的 C 程序(如hello.c编译后的a.out。
2025-12-20 23:43:02
844
原创 C++ STL库map,unordered_map,multimap,unordered_multimap详解
本文摘要:文章系统介绍了C++ STL中的关联容器,重点分析map、unordered_map及其变体multimap的特性与使用。map基于红黑树实现,保持元素有序性,提供O(logn)操作复杂度;unordered_map基于哈希表,提供平均O(1)访问但无序存储。详细对比了两者在构造、访问、查找、删除等方面的差异,并介绍了multimap允许重复键的特性。
2025-12-18 00:13:17
667
原创 动静态库制作与使用
静态库:编译嵌入,独立运行,体积大,更新需重编;动态库:运行加载,共享代码,体积小,更新灵活;制作核心:静态库用ar打包,动态库需-fPIC-shared;-L指定路径,-l指定库名,动态库需解决加载路径。
2025-12-17 18:15:17
612
原创 C++ 继承 多态 组合 从运用到底层原理详解!草履虫也能轻松看懂
本文详细讲解了C++面向对象编程中的继承、多态和组合三大核心概念。继承部分介绍了基本语法、访问权限、构造析构顺序等;多态部分阐述了虚函数机制、纯虚函数、对象切片等;组合部分则分析了强组合和弱组合的实现方式。文章还对比了组合与继承的优缺点,强调"优先使用组合"的设计原则。
2025-12-17 03:24:43
2809
4
原创 Linux - 软硬链接
Linux系统提供两种文件链接机制:硬链接和软链接。硬链接通过共享inode实现文件多路径访问,删除原始文件不影响链接访问,但不支持跨文件系统和目录链接。软链接是存储目标路径的独立文件,支持跨系统和目录链接,但原始文件删除会导致链接失效。硬链接适合文件备份和多路径访问,软链接更适合路径简化和跨设备访问。理解二者差异(inode共享vs路径指向)能帮助用户根据实际需求选择合适方式。
2025-12-16 03:05:58
820
原创 Linux_文件超详细合集: 软件->硬件
本期Blog介绍了基于Linux的文件系统几乎全部的知识点:从文件在软件层的创建,销毁,重命名,输入输出等操作到文件在系统底层的相关操作,再到文件在物理层面的存储方式.我会用尽量简单的方式向你讲解,同时也是向我自己讲解.如果中途你遇到了一些看不懂的,不妨往下看看,也许解释会在后面,因为这些知识点之间关系复杂,很难用线性方式讲解.
2025-12-16 01:17:26
1411
5
原创 C++ STL库set 和 multiset详解
是 C++ STL 中的关联容器,用于存储的元素。:自动过滤重复元素:元素按指定顺序自动排列:基于平衡二叉搜索树(通常是红黑树)实现 O(log n) 的查找:支持查找特定范围内的元素:支持交集、并集、差集等数学集合操作。
2025-12-13 19:34:15
752
原创 C/C++内存管理合集!
C++内存布局与分配机制解析 内存布局分为多个区域:代码段(只读)、数据段(已初始化全局变量)、BSS段(未初始化数据)、堆(动态分配)、栈(局部变量)、共享区和内核空间。堆从低地址向高地址扩展,需手动管理;栈从高地址向低地址收缩,自动管理且大小有限。 内存计算涉及数据类型大小和内存对齐规则。基本类型大小随系统位数变化,指针在64位系统为8字节。结构体/类的大小需考虑成员对齐和填充,总大小需为最大对齐值的整数倍。 内存分配机制包括:new/delete运算符(自动调用构造/析构)、operator new/
2025-12-11 16:40:32
869
原创 C++声明_定义_实例化_前向声明?一次搞懂!
本文系统阐述了C++中四个核心概念:声明(Declaration)是告知编译器标识符存在及其类型,不分配内存或提供实现;定义(Definition)则进一步分配内存或提供具体实现;实例化(Instantiation)特指根据模板生成具体类型或创建类对象的过程;前向声明(Forward Declaration)用于提前声明标识符以解决循环依赖。文章详细对比了声明与定义的关键区别,分析了模板实例化的隐式/显式方式,并重点说明前向声明在降低编译依赖方面的优势。同时延伸探讨了一次定义规则、翻译单元、存储类说明符等相
2025-12-08 18:20:42
634
原创 虚幻引擎-检测射线TraceChannel与形状检测射线
我们现在有一个需求:我们需要先算出来起点和终点,然后用一个函数发射一个射线问题1:由于射线太细,可能导致错过目标物体解决方案:不再使用线性追踪,而是用一个球体射线(扫掠),更加容易命中物体问题2:路径上会有别的物体挡路解决方案:设定自定义的追踪通道,在需要的物体的碰撞预设中添加对我们这个射线的阻碍这样只有我们想要的物体才会被射线检测到.
2025-11-29 06:37:34
701
原创 虚幻引擎-设计场景物体哲学-C++
本文介绍了在C++中设计游戏道具的实现方法,重点演示了可拾取物品和门锁系统的创建流程。首先通过继承Actor类创建CollectableItem基类,设置物品标签;然后详细说明了Lock类的构建过程,包括组件声明、构造函数初始化、碰撞设置和可见性控制。通过触发器组件实现门锁互动功能,当钥匙放置时显示模型并触发开门效果,未激活时隐藏钥匙。这种设计模式可用于创建各种交互式游戏道具,实现复杂的游戏机制。
2025-11-29 04:51:53
559
原创 Linux进程
命名含义l= list(列表参数),e= environment(自定义环境变量)。函数原型参数解释patharg:与execl()一致(路径 + 列表参数,最后NULL结尾)。envp:自定义的环境变量数组(每个元素格式为,最后以NULL结尾),会覆盖当前进程继承的环境变量。示例(执行自定义程序./myprog,并传自定义环境变量):// 自定义环境变量// 最后一个参数是envp数组特点:可自定义新程序的环境变量,适合需要隔离环境的场景(普通exec函数会继承父进程的环境变量)。
2025-11-28 03:55:49
639
原创 虚幻引擎如何实现按键绑定按键反馈C++
本文介绍了在虚幻引擎中实现输入映射的基本流程。主要内容包括:1)输入动作(IA)和输入映射上下文(IMC)的概念,建议将功能相近的动作放在同一IMC中;2)通过SetupPlayerInputComponent函数绑定动作与响应函数;3)以"点击鼠标左键打印Hello World"为例,详细说明了实现步骤:创建输入动作、注册到IMC并绑定按键、在玩家控制类中声明动作和响应函数、绑定动作与函数、最后在蓝图中传入自定义动作。整个过程展示了虚幻引擎输入系统从定义到实现的全流程。
2025-11-28 02:19:47
285
1
原创 Linux 环境变量:定义、核心作用与实操指南
Linux环境变量是动态键值对,用于存储系统配置和路径信息。主要特性包括动态修改、继承性(子进程继承父进程变量)和作用域(局部/全局)。程序员常用变量如PATH(可执行程序路径)、HOME(用户目录)和LD_LIBRARY_PATH(动态库路径)。 设置方式:临时用export命令,永久修改需写入配置文件(如~/.bashrc)。C/C++通过getenv()和setenv()操作变量,但修改仅影响当前进程。Bash作为父进程初始化并传递环境变量给子进程(如C程序),同时提供命令行接口管理变量。 注意事项:
2025-11-27 02:45:20
882
原创 C/C++指针全种类详细解释
本文系统介绍了C语言指针的分类和应用。指针按数据类型可分为基本类型指针、结构体指针、函数指针等;按层级分为单级和多级指针;按用途分为数组指针、指针数组、常量指针等。重点解析了指针的"右左法则"语法规律、void指针特性以及指针运算规则,并提供了动态内存分配、字符串处理等实际应用示例。文中还总结了指针声明口诀和记忆技巧,最后通过解析复杂指针声明演示了右左法则的应用。掌握这些分类和规律能帮助开发者更好地理解和使用指针。
2025-11-26 23:51:29
379
原创 C/C++结构体内存的问题
结构体内存布局遵循成员声明顺序,并考虑对齐要求。成员地址必须满足其大小的整数倍,结构体总大小需为最大成员大小的整数倍(如S1占12字节,S2占8字节)。嵌套结构体需额外考虑内部对齐(如Outer占24字节)。可通过offsetof宏获取成员偏移量,利用成员指针反推结构体地址。结构体内部字节序由硬件决定(x86为小端,网络为大端),不影响整体布局顺序。合理排列成员可优化内存空间(如S2比S1更紧凑)。
2025-11-26 01:20:24
323
原创 详解虚幻引擎的字符串类型
FName是虚幻引擎中的高效字符串标识类型,基于全局字符串池实现轻量化和哈希优化。其核心特性包括:不可变性、大小写不敏感(默认)、O(1)时间复杂度的快速比较。FName主要用于对象标识、标签系统、资源路径等场景,相比FString和FText更注重性能而非文本操作。使用时需注意字符串转换方式(推荐使用TEXT()宏)和大小写敏感设置。TEXT()宏是虚幻引擎处理字符编码兼容性的关键工具,它能自动将字符串适配为TCHAR类型,确保在多语言和跨平台环境下的正确性。
2025-11-25 03:38:12
650
原创 虚幻引擎的标签系统
摘要:本文介绍了在虚幻引擎中如何使用Actor标签控制压力板触发机制。首先为角色蓝图添加"PressurePlateActivator"标签,然后通过ActorHasTag()函数检测该标签。通过绑定OnOverlapBegin和OnOverlapEnd事件,当带有该标签的Actor与触发器重叠时,设置Mover组件的ShouldMove变量控制门的开关。要实现其他物体(如椅子)触发功能,只需为其添加相同标签并开启重叠事件即可。这种方法提供了一种灵活的对象交互管理方式。
2025-11-25 00:06:50
761
原创 草履虫也能看懂的虚幻引擎的委托机制
摘要:委托是一种允许对象注册回调函数的机制,当特定事件发生时自动触发这些函数。虚幻引擎中的委托分为单播(绑定单个函数)、多播(绑定多个函数)和动态委托(支持蓝图)。委托的优势包括解耦对象、运行时灵活性、多播通知、类型安全及与引擎深度集成。通过示例展示了如何声明、绑定和触发委托,对比了直接调用与委托方式的差异,后者显著降低了代码耦合度。委托机制类似于公告板,让事件源无需关心具体接收者,只需广播事件即可实现自动通知。
2025-11-24 21:36:28
764
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅