自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 进程地址空间

页表还有一个标志位,表示当前的代码或数据是否已经被加载到内存里面,如果没有,访问的时候会发生缺页中断,然后再去加载(惰性加载)。父子进程的共享全局变量,在子进程修改时发生了写实拷贝,子进程另开空间存修改值,符合进程的独立性。父进程创建子进程后,子进程修改共享的全局变量,发生写时拷贝,拷贝父进程的页表,修改该变量虚拟地址对应的物理地址,这样父子进程共享了代码,但数据用各自的。以上代码报错的原因,从系统层面上就可以解释了,即使物理内存没有可读可写的概念,但是页表上标明了属性,是的上述代码报错,直接杀死了进程。

2024-02-27 22:08:32 435

原创 Linux环境变量

bash进程在开机时会从配置文件里面读取环境变量(磁盘->内存),我的写的经常是他的子进程,会继承他的环境变量(在env指针数组里面是传参的方式获取,与继承是不同的方式)。在命令行写./a.out -a -b -c 时,会把这些参数以空格作为分隔符放入argv指针数组里,argc代表命令行参数个数。环境变量就是一堆路径,系统执行指令会自东区这些路径里面找可执行程序,下面是添加环境变量的方法,若要覆盖式的更改,去掉冒号即可。PATH存在系统的配置文件里面,开机后会从配置文件里面重新加载到内存里面。

2024-02-26 21:37:11 175

原创 并发编程学习笔记

GIL在线程遇到IO时释放,此时另一个线程获得GIL,开始运行。即使是多核多CPU机器也无法做到并行。

2024-02-26 21:35:55 192

原创 FastApi学习笔记

定义好的类型可以直接用于函数的类型限制。类里面也可以为变量加默认值pytantic里面有一个Feild类,支持对参数的范围限制导入pytantic里面validator就可以用,类似于flask的表单检查。装饰器里面写要检查的字段名,cls表示当前类,value表示前端传过来的数据值。类可以嵌套使用。

2024-02-02 18:04:45 963

原创 Linux 进程

操作系统要管理进程,要先描述再组织。在创建一个进程时,操作系统会自动创建一个结构体对象(pcb,process code block,linux由c语言编写)里面有所有进程的属性,例如pid,ppid,cwd(current working direct),指向进程对应的代码和数据的指针等等。接这会把当前的进程放入特定的数据结构(可以理解成链表)里面组织起来,便于管理。基于以上的操作系统创建进程动作的描述,我们可以简单自己对进程下一个定义:系统创建了pcb就叫做进程。

2023-08-20 16:13:59 72

原创 Linux下gdb调试器的使用

现象是过了1s,hello world 和提示符一起刷新出来。(hello world后没‘\n’,和提示符被刷新)现象是过1s,只出现提示符。(遇到\r,光标移动到行首,在缓冲区后续的提示符覆盖了 hello world)行缓冲区:linux中,遇到‘\n’换行,就把之前的内容从缓冲区刷新出来。现象是先把hello world 刷新出来,再在下一行把提示符刷新出来。控制字符\n(换行), \r(回车 回到该行首)c(continue):执行到下一个断点处,打断点+F5。n(next):逐过程,f10。

2023-08-19 15:28:09 75

原创 Linux下git三板斧

linux git 配置邮箱和用户名报错。git log 查看所有日志。

2023-08-19 15:26:58 77

原创 Linux下makefile的理解

(vs2019的bug原理:代码虽然修改了,但是最近修改日期出bug没变,编译器不会重新编译,所以还是原来的可执行程序,此时清理后所以文件重新开始生成,就可以得到最新的可执行程序)原本的make code.exe 没有被它修饰,只能执行一次,make 默认执行从上到下扫描到的第一组依赖关系和依赖方法。.PHONY:clean 后,能一直被执行。.PHONY:修饰的目标文件被称为伪目标。Touch 更新code.c最近修改时间。其他的组 使用方法:make 目标文件。.PHONY :总是可被执行的。

2023-08-19 15:26:06 56

原创 C++多态

虚函数的重写多继承会继承多张虚表,但是监视窗口看不见cc新加的func3,于是我设计了以下代码调用两张表上的函数。= nullptr;++i)f();cout << "从A那继承的虚表" << endl;cout << "从B那继承的虚表" << endl;return 0;显而易见,C新加的func3会添加在第一张虚表。

2023-08-08 15:28:55 47

原创 C++继承

父类模板给子类模板复用。

2023-08-01 11:12:51 49

原创 模板的特化

模板的特化不仅可以对某些特定类型做特殊处理,还可以对类型做进一步的限制。

2023-08-01 09:57:40 53 1

原创 C++ vector list 和deque的比较

最主要的特点是底层是一段连续的空间,所以迭代器可以支持随机访问(迭代器为random级同时,一段连续的空间缺乏灵活性,难以进行头插和头删(这两个接口STL不支持,但是有insert和erase可以实现任意位置的插入和删除,但是要另起炉灶,重新开辟一块空间然后把处理后的数据拷贝过去,代价太大了),同时尾插和尾删伴随着可能扩容的风险,代价可能会比较大。

2023-07-26 19:48:04 120 1

原创 Linux gcc的使用

自定义可执行程序的名字:gcc test.c -o 新名字(-o后面跟的一定是新可执行程序的名字,和test.c 可交换位置)查看可执行程序依赖的动态库 –-> 可以看出在Linux中,gcc默认采用动态链接的方式。进行到预处理完:gcc -E (源) -o (目的文件,要形成的文件名.i)Pwd(依赖的动态库是c的动态库,可见是由C语言实现的)进行到编译完:gcc -S (源) -o(.s 文件)进行到汇编完:gcc -c (源) -o(.o 文件)依赖静态库的可执行程序更大。动态库和静态库的优缺点。

2023-06-10 17:23:01 1259

原创 Linux 工具安装和vim的使用

查找软件具体名字: yum list | grep 关键字。下载:yum install 具体名字。卸载:yum remove 具zs。Linux 工具安装。

2023-06-10 17:05:20 67

原创 Linux权限

sudo command 可以对某一条指令进行提权,(输入普通用户的password即可)但是目前的普通用户系统默认不信任你,无法执行,后面吧普通用户添加到信任白名单就可以执行。改变权限 : chmod(change权限)— chmod u+/-rwx,g+/-rwx,o +/- rwx 文件名。同一个人的身份只认证一个,顺序为 u - g - o 如果既是user又 只能有user的权限 ,与group的权限无关。su 切换root账户,输入root的密码, 身份变了,但仍然处于普通用户的家目录中。

2023-06-10 16:53:32 57

原创 Linux 基本指令

指令就是可执行程序,指令存在/user/bin目录下。管道:| ,管道文件 内存级的文件 不存在于磁盘中 左边的指令输出文件 到右边管道文件中 再执行右边的指令 (指令的合成)alias 指令的重命名 alias 新指令名 = ’想要被重命名的指令‘(xshell关闭后被重制,是临时的)mv 对目录同理 mv 源目录 新目录 是重命名, 若第二个参数是已存在的目录名,则是把源目录放到目的目录下。cat后跟文件名 读文件的内容 默认写到显示器文件中 如果后面什么都没跟 ,默认读键文件 写到显示器文件中。

2023-06-10 16:02:41 57

原创 C++ string 的用法

(g++ 按照给定的大小开空间, vs2019 考虑到内存对齐的效率问题,会大一点(预留一个字节给'\0')这里开了112 字节的空间)* 缩容实际上是另外开一块空间,把数据拷贝下来,再把原来的空间释放掉,牺牲时间换空间。* resize 在开空间,增加capacity的同时(和reserve一样),进行填值初始化,(size也会增加)文档说不会减少,但是在不同的编译器下可能会减小_capacity,但是不会小于_size。作用:预留空间,减少异地扩容,异地扩容需要更大的消耗,并且改变。

2023-06-10 15:27:56 66

原创 C++ 迭代器

注意:左闭右开 一般用iterator 做参数 的函数 区间都是左闭右开。作用:对所有的容器 给使用者提供迭代遍历数据的方法。S1.bengin() 指向“h”S1.rend() “h”前一个空间。S1.rbegin()指向“d”

2023-06-10 14:14:25 61

原创 C++模板

3. 模版的实例化 : 函数模版根据调用,自己推导出参数类型,然后实例化出对应的函数。此处函数 参数 中没有模版参数T,无法自动通过参数推得模版类型,只能显示。2. 传不同类型 调用的是不同的函数 参数不一样。1. 模版参数,定义的类,任何参数都可以传进来。用法:Stack <double> s1;模版类里面函数声明 类外面定义语法规则。<> 内写统一的类型。

2023-06-10 13:47:28 53

原创 C++ 内存管理

一份源代码由数据和代码组成,在内存中也将两种分开存储,好处是不同的程序可以共享一份代码,同时拥有不同的数据。win下 vs2019中 连续的一个步骤里面,如果存在构造+拷贝构造 会被优化成 一个构造。第一个步骤里面有 拷贝构造 + 拷贝构造(赋值 + 拷贝构造优化而来)优化成一个拷贝构造。new 和 c语言里面的 初始化部分数组一样,其余的初始化0,而没做初始化时全是随机值。sizeof算大小 数组名算的是整个数组的大小 指针算的是指针的大小。如果没有默认构造,则要用{}将构造函数的参数传过去。

2023-06-10 12:47:20 72

原创 C++类和对象收尾

4. 权限放大问题: const Date d(2003,12,19);5. 成员函数void printf()const{} 这里的const 修饰*this,变成const * const this。友元函数声明和访问限定符无关,因为友元函数定义不在类里面,而成员函数定义在类里面,所以调用成员函数受访问限定符限制,友元函数不受限制。一般的定义对象,括号里没东西就不写,{ A a() }不然会和函数声明混淆。,引用类型得是 const A& ,引用会延长匿名对象的生命周期 成 当前函数的生命周期。

2023-06-10 11:49:05 50

原创 C++类和对象(4)

6. 初始化列表定义的顺序不按照初始化列表里的顺序,而是声明的顺序定义。

2023-05-26 20:03:07 67 1

原创 C++ 类和对象(3)

赋值运算符重载 --已经存在的两个对象赋值(赋值运算和拷贝构造的重要区别,尽管 = 连接两个对象, 但有一个不存在 任然是拷贝构造,这个是本质区别) -- 运算符重载拷贝构造 --用一个已存在的对象初始化另一个对象-- 构造函数重载。

2023-05-07 15:50:10 63

原创 C++类和对象(2)

f. 无参的构造函数和全缺省函数称为默认构造函数,但两者只能留一个。e. 如果没有自定义构造函数,编译器会生成一个无参的默认构造函数。1. 作用:在对象销毁时自动调用该函数,完成free之类的资源清理工作。,如int,char等)只能在成员变量全为自定义数据类型是可用默认的。a. a. 返回值类型是void 不写出来。d. 在创建该类的实例化对象的时候自动调用。a. 返回值类型是void 不写出来。b. 函数名为 ~ + 类型名。1. 作用: 初始化函数,并非创建函数。b. 函数名与类名一致。

2023-04-24 20:43:42 45

原创 C++初阶语法——类和对象(1)

1. 成员函数不存在对象之内,这样每个对象都带有一段重复代码, 显然是浪费空间。实际上,成员函数都存在代码区上, 这是个公共空间,每个对象调用时都是调这个函数, 但传递参数不同 , 下面this具体介绍。2. 在有成员变量的时候,用sizeof计算对象或者类的大小, 成员函数不计入。3. 在只有成员变量的时候,sizeof(类)的大小不为0, 为1, 原因是要留着占位1字节占位,大小为0的类的实例化对象无法存储。4. 遵循struct的对其规则。原因:某些硬件一次只能读一定大小的空间。

2023-04-24 20:02:04 56

原创 C++初阶语法

inline修饰函数,再调用时会在原地展开,不会去找该函数的地址(如果同一个文件内就去上面找,如果声明和定义分开,在链接阶段符号表汇总,去符号表上找), 而是原地展开。1. 要初始化。通过存储的数据内容推断格式,肯定要有数据。2. 不能作为函数形参的格式。3. 不能作为数组的类型。

2023-04-24 19:09:26 36

原创 C++语法——引用

1. 引用必须初始化(不同于指针)2. 引用不可改变他的实体3. 一个实体可以有多个引用。

2023-04-20 00:57:45 43

原创 C++语法入门(1)

1.优势:在纯c编程中,经常会遇到全局变量命名重复。使用命名空间,将你命名的变量隔开来,单独放到一个空间里,叫命名空间,对应命名空间域。2. 用法;a.封装域b. 使用域指定访问某个域或者在全局中展开,相当于yyf域里面的变量都暴露在全局中,成为全局变量。但嵌套的域yyf_2任然被“墙壁”围着,在命名空间域内;

2023-04-15 17:44:07 79 1

原创 c语言进阶-数据在内存的存储

c语言进阶-数据在内存的存储

2023-01-08 19:58:57 94

原创 easyX窗口创建不了的解决方法

easyX窗口创建不了的解决方法

2022-12-03 11:33:19 1317 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除