- 博客(99)
- 收藏
- 关注
原创 左值引用和右值引用
指的是有确定存储位置(地址)的对象,通常可以出现在赋值语句左侧。例如:变量名、解引用指针得到的对象、数组元素等都属于左值。一般指临时对象或字面常量,通常没有固定的存储地址,只能出现在赋值语句右侧。例如:字面量(42"hello")、表达式求值产生的临时结果(a + b、函数返回的非引用类型)等都属于右值。T&T&含义:引用一个,必须绑定到一个具有名字且可寻址的对象上。作用:可以通过引用直接操作原对象,不产生拷贝;常用于函数参数(接收可修改的实参)或延长临时对象的生命周期(使用const T&T&&
2025-06-03 21:39:04
947
原创 socket通信中的accept函数
m_sockfd参数输入 / 输出作用m_sockfd输入哪个监听 socket 来 acceptaddr输出客户端地址将被写到这里addr_len输入 + 输出告诉系统结构体多大、系统写入实际使用大小。
2025-05-16 10:19:38
426
原创 rsize和reserve的不同
函数改变size()改变capacity()构造元素常用用途reserve(n)❌ 否✅ 是❌ 否优化性能、减少扩容次数resize(n)✅ 是✅ 可能✅ 是设置真实元素个数。
2025-05-09 09:21:05
283
原创 在c++中static用在全局和局部有什么区别
在 C++ 中,static关键字的作用会根据其使用的上下文(全局作用域、局部作用域等)有所不同。
2025-05-08 16:36:18
850
原创 c++初始化结构列表
初始化列表不是赋值!必须用它来初始化 const、引用、无默认构造的成员和基类!成员初始化顺序由声明顺序决定,不是你列表里写的顺序!
2025-05-06 11:25:13
201
原创 静态成员变量和静态成员函数
public:// 仅声明:告诉编译器有这个变量count = 10;// ✅ 可以访问// 这一句是“定义 + 初始化”如果你没有这一句定义,即使你在foo()里使用countclass A {// ✅ 这不是定义类的静态成员变量,而是定义函数内的静态局部变量这里x是foo()里的局部变量,跟类成员无关。而A::x仍然必须类外定义。需求写法是否合法声明静态成员变量(类内)✅定义静态成员变量(分配内存)✅ 必须静态函数中访问静态变量x = 10;(类作用域内)✅。
2025-05-05 10:30:00
182
原创 new和malloc的区别
new= 分配内存 + 构造对象 + 类型安全 + 异常语义;malloc= 只要一块原始字节,剩下的你自己负责。掌握两者差异,才能在系统编程与高性能场景中游刃有余。是的,你理解得基本正确操作newdeletemallocfree内存分配自动完成手动构造函数调用自动(带参数或默认)❌ 不会;需手动析构函数调用自动❌ 不会;需手动对象->~类名()安全性 / 易错性高,配合 RAII 可防泄漏容易出错,忘构造或析构都会导致 UB 或泄漏malloc。
2025-05-02 15:07:11
594
原创 网络通信的字节序
如果还想看实际打印内存的 demo,告诉我,我可以再给你补代码。CPU 要先拿到这 4 个字节,然后再“解释”它们到底是哪一位是高位、哪一位是低位。→ 又回到了“一个值多字节”,这时才出现。不存在“系统偷偷给你变成 CBA”的情况。→ 跟普通字符串一样,不涉及字节序。→ 要把多字节拼成单个数 →。:把最低有效字节放在最低地址。:把最高有效字节放在最低地址。→ 没有再组合的步骤 →。1 字节 → 不用管字节序。统一到“网络字节序”。要做的事——它只在“1 字节 → 可能要管。是 → 需要统一字节序。
2025-04-25 15:41:50
261
原创 mmap和new/malloc的区别
PageCache 直接mmap匿名私有页,一次拿整块页对齐内存,避免进入 glibc 堆管理队列;这给了我们对页级切分、合并与回收的 100% 主动权。munmap让内存池可以把闲置 span 即时退回内核,避免双重碎片,并降低进程常驻集大小。“对多线程来说,我们绕过 glibc arena 锁,保证大块分配 O(1) sys‑call 成本,线程伸缩稳定。
2025-04-23 12:00:00
1207
原创 程序是怎么运行的
**链接器**将多个目标文件(如 `main.o`、`printf.o`)合并,解析符号引用(例如找到 `printf` 函数的实现地址),生成可执行文件(如 `a.out`)。- **步骤1**:CPU 从内存代码段读取指令 `movl $10, -4(%rbp)`,将立即数 `10` 写入栈上的变量 `x`(地址 `0x7ffd1234`)。- 预处理器处理 `#include`、`#define` 等指令,展开宏、包含头文件,生成预处理后的代码(`.i` 文件)。
2025-04-22 09:32:14
554
原创 代码是如何运行的?编译期和运行期的区分。
简单来说:编译时期:代码 → 机器指令的转换过程。运行时期:机器指令真正被 CPU 执行、程序运行的阶段。举例: 🚀 运行时期 (Runtime)程序真正运行时(CPU 执行时)做的事:举例: 🎯 三、如何快速区分编译时和运行时?(对照法) 特性 编译时期 运行时期 发生时间 编译代码时(程序未启动) 程序运行时(程序启动后) 处理对象 源代码 () 机器指令(二进制可执行文件
2025-04-21 10:29:20
921
原创 C++中const与constexpr的区别
**特性** | **编译时** | **运行时** || **对象构造** | 运行时构造 | 允许编译时构造(需 constexpr 构造函数) || **初始化时机** | 编译时或运行时 | 必须编译时 |
2025-04-17 14:58:43
785
原创 151. 反转字符串中的单词
去除多余空格利用快慢指针遍历字符串,原地复制单词并在单词之间插入单个空格。整体反转字符串将所有字符整体反转,这一步反转了单词的顺序,但单词内部也被反转。反转每个单词对每个单词分别再反转一次,使单词内部字符恢复正确顺序。返回结果得到的字符串即为“单词顺序反转且各单词间只有单个空格”的结果。这样整个处理流程既实现了去除多余空格,又完成了单词顺序反转,同时保留了每个单词内部字符的正确顺序。
2025-04-14 21:04:31
680
原创 Cmake常见指令
下面是经过大量实战提炼出来的最常用、最刚需、最清晰的 CMake 命令语法表,并附带功能备注说明👇📌 二、添加目标文件(执行程序 / 静态库 / 动态库)📌 三、包含头文件目录📌 四、链接库文件📌 如果链接系统库:📌 五、文件自动收集📌 六、设置输出路径(推荐的现代写法)📌 七、设置 C++ 标准版本📌 八、设置编译选项📌 九、设置库的输出名称或属性📌 十、指定源文件目录
2025-04-14 10:14:50
173
原创 在main函数中编写匿名函数
/ 定义一个 Lambda 表达式(匿名函数)" << endl;// 调用它sayHello();// 输出:Hello from Lambda!return 0;用法类型示例最简单带参数带返回类型捕获外部变量值捕获引用立即执行}(3, 4);
2025-04-01 15:19:22
193
原创 硬链接和软链接
对比项硬链接 (Hard Link)软链接 (Symbolic Link)inode 是否相同是,同一个 inode,多名字共享同一文件本体否,软链接有独立 inode,里面保存了目标的路径字符串对文件系统要求必须在同一文件系统内部可指向任意路径(可跨越文件系统)能否链接目录一般不可链接目录(除非特殊配置)可以链接目录是否独立文件不是独立文件,和原文件是同一个物理文件是独立文件,大小通常很小(只存路径),访问时需解析目标目标删除影响若硬链接数>1,删除某一链接不影响文件实际数据。
2025-03-28 21:08:47
637
原创 系统如何查找文件?inode号又是什么?
inode(索引节点)是类 Unix 文件系统中的一种数据结构,用于存储文件的元信息(metadata)。典型包含:文件大小、访问权限(rwx)、文件所有者(UID/GID)、时间戳(修改时间、访问时间等);数据块指针(block pointers),告诉操作系统文件内容在哪些磁盘块上。文件系统怎么定位文件?通过目录文件找到对应的 inode 号,再由 inode 查到磁盘上真正的数据块。inode 是什么?是存储文件元数据和数据块指针的结构体,不记录文件名;名称保存在目录项里。
2025-03-28 20:20:50
833
原创 僵尸进程和孤儿进程的基础知识
僵尸进程:子进程结束后,父进程尚未回收其退出状态时留下的进程占位。危害:占用系统 PID 资源,过多时可能导致无法创建新进程,影响系统的稳定和维护。预防/清理:父进程要正确调用wait()等函数、处理SIGCHLD信号,或者确保子进程在父进程退出后由init进程托管并回收。
2025-03-27 10:24:14
322
原创 进程和线程的区别
**场景** | **进程并行** | **线程并行** || **维度** | **进程(Process)** | **线程(Thread)** |- 例如:单个视频渲染软件启动16个线程,其中12个由P核超线程处理,4个由E核处理。
2025-03-20 10:42:43
445
原创 字符串输入方式
这些方法各有适用场景,在实际编程中应根据需要选择合适的方法,同时注意缓冲区大小和输入安全问题。这种方法会读取整行输入,但由于无法防止缓冲区溢出,从C11标准开始已经被废弃,不建议使用。这种方式会读取输入中的单词(遇到空白字符停止),适合读取单个单词。这种方式更安全,可以读取包含空格的整行输入,并且指定最大读取长度。注意:这种方法不检查缓冲区溢出,也无法读取包含空格的字符串。这种方式会读取整行,包括空格,直到遇到换行符。会将换行符也读入,如果不需要可以在读取后处理去除。
2025-03-19 11:15:00
181
原创 TCP 通信流程图
如果需要更加具体的代码示例、协议细节或者其他场景(例如 UDP、WebSocket、反向连接等),请告诉我!为便于阅读,采用 ASCII 画出大致示意。协议进行通信时的各个步骤。
2025-03-17 15:52:00
2026
原创 计算机端口的作用
使得计算机能够在同一个 IP 地址上同时运行多个网络服务。这样,服务器就能同时处理多个服务,而不会混淆数据。规则中,可以开放或关闭端口。你对端口的管理或使用有具体需求吗?
2025-03-17 15:21:18
1123
原创 vim在Linux中的作用
在Linux中,所有的文件默认都是普通文件mkhahamkhaha.txtmkhaha.sh这些名字或者扩展名本身并不决定文件的类型,它们只是为了方便人类识别用途而已。Linux系统中,并不会严格依赖扩展名来决定文件类型。你看到的mkhaha-rwxr-xr-x开头的表示它是普通文件,而非目录(目录是以d开头)。文件是否能执行,是由文件的权限决定的(这里有x权限代表可执行),而不是由扩展名决定。Linux中文件名和扩展名不是强制的,而是习惯性的命名规则。
2025-03-17 11:00:00
589
原创 linux中yum和wget指令的区别
都是 Linux 上的下载工具,但它们的用途、下载方式和适用场景不同。📌 作用:查找包含 "git" 关键字的软件包。📌 作用:如果下载中断,继续下载文件。📌 作用:更新所有软件包到最新版本。源没有你需要的软件,你可以先用。下载 RPM 包,再手动安装。,如果缺少依赖,需要手动安装!,并自动安装所需的依赖项。,并自动安装所有依赖项。📌 作用:将网页保存为。如果你只是想下载一个。,如果你下载的是一个。,但不会自动安装它。
2025-03-13 21:00:00
940
原创 Linux中查询软件存在
你可以试试这些方法,看看你的 Linux 系统里有哪些软件!存在,它会返回路径,否则不会有输出。如果没有安装,则不会返回任何内容。如果某个软件没有安装,可以使用。存在,会显示安装信息。type <软件名>
2025-03-13 15:00:00
381
原创 Linux中grep指令
grep -i "warning" log.txt # 查找 "warning"(包括 Warning、WARNING 等)grep -e "error" -e "fail" log.txt # 匹配 "error" 或 "fail"grep "error" log.txt # 查找 log.txt 中所有包含 "error" 的行。grep -r "debug" . --exclude="*.log" # 递归搜索,排除 .log 文件。
2025-03-11 14:15:00
777
原创 Linux的mkdir指令用法
**安全性**:系统目录(如 `/bin`, `/etc`, `/usr`)通常需要管理员权限(`root`)才能修改,防止普通用户误操作影响系统稳定性。- **权限管理**:避免随意赋予 `777` 权限(所有用户可读写),尽量通过用户组(`chown` 和 `chmod`)精细控制。- **目录用途**:遵循 Linux 目录规范(如 `/etc` 放配置,`/opt` 放第三方软件)。- **系统目录(如 `/usr`)**:用 `sudo` 或提前配置权限。
2025-03-11 09:32:44
311
原创 Linux的基础操作指令
在指定的文件夹中创建文件,只需要提供完整路径。,不仅限于当前文件夹。来在任何可写的目录中创建文件。就不会因为目录不存在而报错。不会自动创建目录,必须先用。中创建文件,可以结合。
2025-03-10 14:29:36
255
原创 substr 和 strcmp的区别和用法
是一个 C 语言中的字符串比较函数,定义在。类的成员函数,属于 C++ STL,定义在。它用于从字符串中提取一个子字符串。它用于比较两个 C 风格字符串(头文件中(C 语言中是。
2025-03-04 15:18:17
274
原创 物理内存与虚拟内存
物理内存指的是计算机中实际存在的硬件内存,通常是指随机存取存储器(RAM)。它是计算机运行程序和存储数据的主要存储介质,具有高速读写的特点。特点有限性:物理内存的容量有限,受硬件成本和技术制约。高速性:与其他存储设备(如硬盘)相比,物理内存的读写速度更快。直接访问:CPU可以直接访问物理内存中的数据和指令。物理内存是计算机中实际存在的硬件内存,容量有限但访问速度快。而虚拟内存。
2025-01-16 10:34:14
1690
原创 智能指针的初步探索
return a;返回类型int*: 该函数返回一个指向整数的指针。new操作符在堆(动态内存)上分配一个整数空间,并初始化为10。返回一个指向该整数的指针。int* a: 声明一个指针a,指向新分配的整数。return a;: 返回指针a,使得调用者可以访问该动态分配的整数。这段代码通过动态内存分配演示了指针的使用和内存管理的重要性。动态内存分配: 使用new在堆上分配内存。指针操作: 使用指针访问和操作动态分配的内存。内存释放: 使用delete释放分配的内存,防止内存泄漏。
2025-01-16 09:43:27
770
原创 getling,find, substr,repalce的用法
为什么使用getline?getline能够读取包含空格的完整句子,而cin只能读取以空白字符为分隔符的单词。为什么需要清除换行符?cin >>操作后,换行符\n可能残留在输入缓冲区中。如果不清除,getline会读取这个换行符,导致跳过输入。如何清除换行符?使用,可以清除缓冲区中的多余字符(如换行符)。find:用于查找字符串中字符或子字符串的索引位置。substr:用于提取字符串的子串。replace:用于替换字符串中的某部分内容。这三个函数结合,可以高效地实现字符串的查找、提取和替换功能。
2025-01-14 16:24:36
788
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人