- 博客(47)
- 收藏
- 关注
原创 双指针算法注意事项:从 三数之和、四数之和中总结那些最容易踩的坑
在做「有效三角形」「三数之和」「四数之和」这几道题时,可以明显发现它们实际上属于同一类问题:本文结合实际刷题过程中遇到的典型错误,总结双指针算法最值得注意的几个问题。很多双指针题都有这样的代码:排序不是为了好看,而是为了让指针移动具有明确的方向。例如:如果当前:因为数组已经升序排列,想让和变大,只需要:因为 右移以后,数字只会变大。反过来,如果:想让和变小,就:因此双指针最核心的前提之一就是:排序恰好提供了这种单调性。这一点在「有效三角形个数」中非常容易写错。例如
2026-08-16 19:48:13
358
原创 C语言内存函数详解:memcpy、memmove、memset、memcmp及手撕实现
在 C 语言中,除了strcpystrcmp这些针对字符串的函数之外,<string.h>还提供了一组直接操作的函数。
2026-08-13 22:42:43
368
原创 Linux 文件系统挂载详解:从 mount 命令到挂载原理
先看一个简单例子。/dev/sdb1我们希望访问里面的文件。这是 D 盘/mnt/data/dev/sdb1↓挂载↓/mnt/data看到的就是/dev/sdb1这个文件系统中的内容。挂载,就是把一个文件系统接到 Linux 目录树的某个位置。块设备/dev/sdb1↓磁盘上存在 ext4 等文件系统↓mount()↓Linux VFS↓建立 mount 结构和挂载关系↓连接到目录 /mnt/data↓用户访问 /mnt/data/a.txt↓VFS 路径解析。
2026-08-11 21:22:54
500
原创 虚拟地址—物理地址趣谈
什么是虚拟地址?呐上面这一串32位的东东就是虚拟地址,看上去像一串电话号码一样,已经晕了~其实虚拟地址在生活中无处不在,例如:你平常取快递的取件码类似:4-1-2004再看看上面的虚拟地址,突然恍然大悟一拍脑门,原来这就是虚拟地址!是的!4-1-2004不就是货柜号-货架号-快递(偏移)号吗?虚拟地址是怎么来的?CPU 会根据寄存器、基址、偏移等算出一个地址,这个地址就是送给 MMU 的虚拟地址(在 x86 里更严格地说通常是线性地址)。那什么又是物理地址?
2026-08-11 21:18:50
315
原创 gdb的使用与调试方法
CGDB它不是另一套调试器,底层仍然是 GDB,只是在终端中增加了源码窗口、断点标记、当前执行行高亮和快捷键。上面通常显示源码,下面是标准 GDB 命令行;因此所有 GDB 命令在 CGDB 里仍然可以使用。
2026-08-05 20:09:19
174
原创 使用命名管道对system-v共享内存通信实现同步机制
所谓同步机制,关心的就是的问题,本次设计代码利用读端open后,只有写端打开才会读,否则就会堵塞,其次在client写入共享内存后,才会执行write,去否则read会一直读到0,阻塞在while循环中,不会去读。
2026-08-05 19:23:00
153
原创 system-v 共享内存通信
System V 共享内存可以理解为:内核创建一块共享内存区域,再把这块区域同时映射到多个进程的虚拟地址空间中。多个进程虽然拿到的虚拟地址可能不同,但最终访问的是同一批共享内存页。
2026-08-04 21:22:24
322
原创 匿名管道的使用
匿名管道(pipe)命名管道(fifo)本文重点讲的是匿名管道。没有文件名只能用于有亲缘关系的进程之间通信典型就是:父子进程一般通过pipe()创建,再通过fork()让父子进程共享它所以匿名管道最常见的使用场景就是:父进程创建管道,然后fork()出子进程,父子进程通过这根管道通信。匿名管道的优点:使用简单适合父子进程通信不需要额外文件名只能用于有亲缘关系的进程通常是半双工通信一次更适合单向通信数据不带“消息边界”本质上是字节流。
2026-07-28 16:46:31
345
原创 硬链接与软链接的区别
硬链接实际上就是文件的备份,文件之所以能够在操作系统保存,就是因为有文件名与inode之间存在映射关系,而这个映射关系通常会被保存在目录中,可以用readdir系统调用进行调试观察,下面是展示运行该系统调用后样子:可以看到存在文件名与inode之间的映射,而硬链接就是创建一个新文件例如code.hard来保存code.cpp所对应的inode,并将该对应关系保存在当前文件夹中(隐含的必须用readdir才能看见),也就是说硬链接后,文件夹会保存2份文件,code.cpp与code.hard,但是它们对应的i
2026-07-22 21:49:36
181
原创 2.内核空间里面的PCB是所有进程的吗?每个进程都有丢虚拟地址空间吗?如果都有虚拟地址空间总大小是不是完全加起来?
✅ 是的。每创建一个进程,Linux都会给它建立一个独立的虚拟地址空间。例如:它们看到的地址可以完全一样。例如:看起来一样。区分。
2026-07-21 20:26:24
224
原创 调用fwrite这种库函数后,如果紧接着fork(),会刷新几次缓冲区?谁先谁后?会调用COW吗?(自用整理)
情况fork后缓冲区刷新次数结果fork前 fwrite 未 fflush父子各一份2次hellohellofork前 fflush空缓冲0次hellofork后 exit刷新2次重复fork后 _exit不刷新0次丢失fork后修改buffer触发COW看情况产生独立页fork复制的是用户态地址空间,所以stdio缓冲区会被复制;文件描述符和内核缓存不会复制。父子进程退出时各自flush自己的缓冲区,因此可能产生两次write。
2026-07-21 19:59:07
204
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1