- 博客(76)
- 收藏
- 关注
原创 13. C生万物之动态内存管理
本文我总共会介绍三种动态内存函数,分别是malloc()calloc()realloc(),与之对应内存释放函数还有free()
2024-07-05 21:47:02
1107
原创 Linux多线程【线程互斥】
生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者 要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。挂起等待锁:当某个线程没有申请到锁的时候,此时该线程会被挂起,即加入到等待队列等待。当锁被释放的时候,就会被唤醒,重新竞争锁。悲观锁:在每次取数据时,总是担心数据会被其他线程修改,所以会在取数据前先加锁(读锁,写锁,行锁等),当其他线程想要访问数据时,被阻塞挂起。
2024-07-02 21:11:48
965
原创 Linux多线程【线程控制】
在之前的认知中,我们都认为一个进程就是一个PCB + 程序的代码和数据。但是现在我们要重新认识进程了。当进程内部只有一个执行流的时候, 进程 = PCB + 程序的代码和数据。当进程内部有多个执行流的时候 ,那么进程 = 多个PCB + 程序的代码和数据。在CPU的视角中,CPU其实根本不关心当前调用的是进程还是线程,因为它只认PCB,也就是。所以在linux系统下,PCB
2024-07-02 16:37:15
1223
1
原创 16. C++11 右值引用和移动语义,完美转发和万能引用,移动构造和移动赋值,可变参数模板,lambda表达式,包装器
C++11 右值引用和移动语义,完美转发和万能引用,移动构造和移动赋值,可变参数模板,lambda表达式,包装器
2024-06-27 16:56:07
1075
1
原创 15. C++哈希表、哈希桶的实现以及模拟实现封装unordered_map 和 unordered_set && 位图 && 布隆过滤器 && 哈希切割相关
C++哈希表、哈希桶的实现 && 模拟实现封装unordered_map 和 unordered_set
2024-06-25 16:47:44
1196
1
原创 STL——set、map、multiset、multimap的介绍及使用
STL——set、map、multiset、multimap的介绍及使用
2024-06-16 18:32:52
1249
1
原创 Linux信号概念,信号的产生异常情况,信号的保存,信号的处理,捕捉信号,可重入函数,volatile,SIGCHLD信号
Linux信号概念,信号的产生异常情况,信号的保存,信号的处理,捕捉信号,可重入函数,信号角度理解volatile,理解子进程向父进程发送SIGCHLD信号
2024-05-14 09:39:49
842
4
原创 Linux进程间通信 && pipe && 实现进程池 && 命名管道 && 实现打印日志 && 共享内存代码验证 && 消息队列 && 信号量
Linux进程间通信pipe的使用,用C++实现模拟线程池,命名管道的创建以及通信,最后实现打印日志
2024-05-11 18:08:23
885
5
原创 Linux理解文件操作 && 文件描述符fd && 理解重定向 && dup2 && 缓冲区 && C语言实现自己的shell
我们在平时使用的C/C++/Java的时候,我们所用的文件操作都是封装系统接口来进行供我们操作,我们在使用这些接口,本质上就是在访问硬件,也就是磁盘一个硬件设备是如何被函数接口的调用访问到的呢?当然是通过操作系统,操作系统是管理硬件设备的,在我们学的C/C++/Java等等语言所封装的文件操作接口,都必须通过操作系统的允许,才可以访问到磁盘这个硬件设备,而操作系统是不相信任何用户的,所以为了能够得到操作系统的允许,我们又必须提供一些系统调用接口,供操作系统和用户打交道。
2024-05-04 21:18:19
762
2
原创 Linux动态库和静态库
动态库在多个程序间共享,节省了磁盘空间,操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用,节省了内存和磁盘空间。动态库是程序在运行的时候才去链接相应的动态库代码的,多个程序共享使用库的代码。如果程序不知道其所使用的动态库的路径, 那么进程在运行时, 操作系统就不能根据程序把动态库加载到内存中。我们知道, 动态库在链接时是不会将代码加载到程序中的, 只会将代码以一个相对地址的形式加载到程序中。如果动态库不能被加载到内存中, 进程的虚拟地址空间的共享区就不能指向动态库的代码。
2024-04-29 19:45:23
731
1
原创 Linux文件系统 && 软硬链接
如果使用512KB,可能会进行更多次数的IO,造成效率降低,而且如果操作系统使用和磁盘一样的大小,万一磁盘基本大小变化了,OS的源代码也需要改变,所以OS有自己一套的规定,这样就完成了软件和硬件的解耦。字节的空间,保存的是对应特定文件的属性,该块组内,所有文件的inode空间的集合,需要标识唯一性,每一个inode块,都要有一个inode编号。一般而言一个文件,一个。它的内部也是一个位图,每一个比特位和 特定的inode是一一对应的,如果该比特位为1,说明该inode已经被占用,否则表示空闲可用。
2024-04-21 10:13:43
874
2
原创 9. C++模板【函数模板与类模板】【非类型模板参数、模板特化和模板分离编译】
C++模板【函数模板与类模板】【非类型模板参数、模板特化和模板分离编译】
2024-04-16 10:04:00
1095
1
原创 Linux进程的优先级&&环境变量&&上下文切换&&优先级队列
如何设置本地变量呢?但是使用【echo】命令还可以查看到,因为echo是可以操作环境变量的,所用echo命令是可以操作所有的变量的,不管是本地变量还是环境变量。,这个nice值有正负数,我们可以举一个例子:一个进程的PRI为80,我们给NI值为-10,再根据上面的公式得出新的PRI为70。因为PRI是系统内核去动态调整的,我们修改后需要经过内核的允许,如果这个PRI值超过了内核的最大限度,那么这个值就会保留在。我们发现使用env来查看我们设置的变量,并不能显示出结果,证明了我们刚刚设置的变量是本地变量。
2024-04-03 09:37:10
2177
84
原创 Linux之进程控制&&进程终止&&进程等待&&进程的程序替换&&替换函数&&实现简易shell
所以如果我们模拟实现的shell也想实现cd改变路径的功能,实际上是不可以创建子进程的,因为子进程程序替换执行cd,父进程的工作目录是没有改变的,所以直接将这一种情况单独拿出来进行判断,在这种情况下,直接让父进程执行cd命令,修改父进程的工作目录即可。在模拟shell的实现代码中,cd到其他目录,pwd之后的路径实际上是没有变化的,因为pwd实际上pwd的是父进程shell的路径,而父进程的cwd路径始终是未改变的,而执行cd命令的是子进程,所以子进程的cwd路径是会改变的。这就是进程之间的独立性。
2024-03-28 15:54:04
1848
83
原创 8. C语言之操作符详解
本文介绍了算术作符、移位操作符、位操作符、赋值操作符、单目操作符、强制类型转换、关系操作符、逻辑操作符、条件操作符以及问题表达式
2024-02-29 15:19:06
1437
96
原创 6. C++内存管理学习【new】
本文讲解了C/C++内存分布形式,并且学习C++中new的操作,最后了解了内存泄漏分类,如何检测内存泄漏,如何避免内存泄漏
2024-02-24 08:54:42
3010
106
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人