- 博客(22)
- 收藏
- 关注
原创 生产者消费者模型
使用sem_init细则:第三个参数为信号量的数量二,为什么需要先申请信号量再加锁?回答:先申请信号量可以节省申请信号量的时间,线程在申请锁处等待即可。如果先申请信号量则只能串行执行申请信号量和锁。
2024-07-15 20:10:18
166
原创 map和set的封装细节
调用insert函数,insert返回一个pair,pair第一个参数为指向节点的迭代器,因为重载了-> ,所以迭代器调用second——首先调用->函数找到pair的地址,再去找到second,因为第二个参数可以修改,所以返回second的引用。当右节点为空时,此时以此节点为根的整棵树都遍历完成,这是向上找到parent左边为cur的parent节点,此时parent为下一个需遍历节点。当此节点的右节点不为空时,找到右子树的最左节点,此时为当前节点的下一个节点。细节图在往期中有画,这里附上源码。
2024-05-22 10:24:57
287
原创 文件描述符
是由从0开始递增的正整数,其中被默认打开的是,0:标准输入(键盘);1:标准输出(显示器);2:标准错误(显示器)。其后被打开的是未被分配的最小文件描述符。
2024-04-01 11:20:57
174
原创 进程程序替换
程序被替换后不会再创建新的进程(进程的pid不会改变),但是该进程的数据和代码都会被替换(从新程序开始执行开始)。e(env):可以传输环境变量(系统和自己定义的都可以),传参是需要以NULL结尾。其中只有execve是系统调用,其他的函数都是底层封装了execve函数。shell的原理本质是创建了一个子进程,让子进程替换程序文件去执行。l(list):表示参数的命令行采用列表,传参是需要以NULL结尾。v(vector):表示命令行采用顺序表。p(path):自动搜索环境变量。
2024-03-27 21:06:02
163
原创 进程地址空间
是进程的组成部分,是一个结构体,结构体中划分了不同的区域,栈,堆等区域,其中的地址都是虚拟地址,通过页表映射到物理地址上。父子进程指向的的虚拟地址相同,当子进程需要修改变量时,会发生写时拷贝,再想操作系统申请一块物理地址,但是父子进程的虚拟地址还是相同的。1,将物理内存从无序访问到有序访问。2,将进程管理与内存管理解耦。3,防止错误直接访问物理内存。为什么需要进程地址空间?什么是进程地址空间?
2024-03-18 20:07:00
332
原创 进程基本概念
在操作系统内存紧张的时候,不太重要的进程被唤出的磁盘中,不在内存中的进程被称为阻塞挂起。2)stat列中的状态字母后无“+”表示此进程为后台运行状态,需要用kill指令杀死。2)fork函数给父进程返回子进程的pid,给子进程返回0,类型为整形。1)不同的进程有不同的状态,状态决定操作系统对进程的后续操作。1)以父进程为模板创建子进程,但是pid与父进程的不一致。1)fork函数在函数体中创建一个进程,所以被返回了两次。3)进程排队一定是在等待某种资源。
2024-03-12 17:19:01
332
1
原创 make/makefile
与其直接关联的是makefile文件make命令执行的是makefile中的默认命令。再次执行make,make命令会生成的对象文件修改时间判断是否需要更新对象文件。即如果未修改源文件,不会执行make命令。
2024-02-23 20:10:22
381
1
原创 reverse_iterator
template<class iterator,class Ref,class Ptr>为reverse_iterator的模板,通过容器类中的typedef传递参数,在reverse_iterator类中重载前置,后置++,--,即使是原生指针也需要重载,因为在test使用迭代器的时候类型已经变成了自定义类型,在容器类中写rbegin(),rend()函数,需要注意返回值需要使迭代器闭环。
2024-01-26 18:06:45
350
1
原创 c++入门知识
内置类型会先去调用该自定义类型的构造函数产生一个临时的对象,再将对象拷贝构造给自定义类型对象。如果不想发生隐式转换则可以在构造函数前加explicit关键字。如下代码所示:代码运行结果为12class A{private:int _month;a.print();return 0;加explicit不能隐式转但是六月强制转换,运行结果依然是12。
2023-12-23 17:16:11
363
1
原创 c++类和对象(2)
析构函数无参无返回值,且不支持重载,其作用为在实例对象结束作用域结束时自动调用,析构是按照实例对象构造的相反顺序进行析构,符号为 ~类名。
2023-12-19 18:35:48
387
1
原创 c++入门
(1).函数中在堆上的或者是静态的空间返回引用没有问题,因为栈帧的销毁不会销毁空间。(2).函数中在栈上开辟的空间返回引用值则有问题,原由与上述相反。
2023-12-13 22:28:52
330
1
原创 排序算法总结
右边指针一定要先走,才能确保最后被交换过去的是比a[left]小的值这段代码前面语句一定要注意,防止在找的过程中两个指针交叉。后面语句一定要注意等号,防止指针一直停在那里发生死循环。
2023-12-10 22:07:00
369
1
原创 文件结束的判定
feof函数是用来判断是否遇到了文件结束标志eof来判断是否读取结束的。在文件读取过程中,不能直接使用feof函数文件读取是否结束。fgetc判断结束标志是eof。fread读到几个元素就返回几。fgets判断标志是NULL。
2023-10-15 15:54:54
42
1
原创 结构体综述与联合体
char ucpim1占用一个字节而ucData0在第二个字节中只占1个比特位ucDATa1在第二个字节中占用2个比特位ucData2在第二个字节中占用3个比特位若在其中任何一个过程中前面的变量已经将一个字节占下剩余的空间不足以放下一个变量,则令创建一个字节为下一个变量存储。例如此时打印结果为pstPimData的大小为3个字节,即开创第四个变量的时候第二个字节已经放不下了,则直接浪费第二个字节的前两个比特位,另外开创第三个字节存储ucData2。
2023-09-24 20:26:18
39
1
原创 数据在内存中的存储
但是在C语言中除了8 bit的char之外,还有16 bit的short 型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32 位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。例如:一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为 高字节, 0x22 为低字节。(-1)^S表示符号位,当S=0,V为正数;那么,S=1,M=1.01,E=2。
2023-08-09 10:58:30
39
原创 JAVA循环结构练习题ATM取款机
System.out.println("剩余金额:"+k+",是否继续('1':结束,'2':继续):");System.out.println("目前余额:"+k+"无法满足您的取款需求!System.out.println("剩余金额:"+k);System.out.println("欢迎使用中国人民银行ATM取款机");System.out.print("输入取款金额:");System.out.println("取款结束");如有缺陷,还请业界大佬指点!
2023-03-26 15:28:19
452
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人