![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
文章平均质量分 61
Knock man
在校大三学生一枚,软件工程专业 敢于做逆行者,写好每一篇博客,不断提高自己,欢迎交流
展开
-
C++对象优化
4.静态全局变量编译时分配内存,程序启动时初始化。局部静态全局变量编译时分配了内存,第一次运行到初始化。3.指针引用临时对象出语句会析构(不安全),引用引用临时对象出语句不会析构。用临时对象生成新的对象的时候,临时对象就不产生了,直接构造新对象就可以了。:被调函数返回一个临时对象时,会首先在调用函数栈帧上。3.接收返回值是对象的函数调用的时候,优先。显示生成临时对象 生存周期:所在语句。1.函数传递参数过程中,对象优先。2.当函数返回对象的时候,应该。,而不要返回一个定义过的对象。,不要按赋值的方式接收。原创 2024-07-27 14:23:47 · 177 阅读 · 0 评论 -
基于CAS操作的atomic原子类型
无锁操作,其实是硬件层面实现总线的加锁操作。对于多线程下的简单类型操作,使用。,对于软件层面是无锁操作。,且临界区代码做的事情。原创 2024-07-27 10:50:45 · 63 阅读 · 0 评论 -
引用和指针的区别
通过引用变量修改所引用内存的值,和通过指针解引用修改指针指向内存的值,其底层指令是一摸一样的。1.右值引用专门用来引用右值类型,指令上,可以自动产生临时量,然后直接引用临时量。4.观察汇编代码发现,引用是将变量的地址存入内存中,所以需求变量必须有地址。3.定义一个引用变量,和定义一个指针变量,其。简单点判断:可以在=左边是左值,否则是右值。3.不能用一个右值引用变量,来引用一个左值。2.引用只有一级引用,没有多级引用。左值:有内存,有名字,值可以修改。,只能用左值引用来引用它。引用是一种更安全的指针。原创 2024-07-20 09:20:25 · 291 阅读 · 0 评论 -
C++11 容器emplace方法刨析
【代码】C++11 容器emplace方法刨析。原创 2024-07-19 22:44:50 · 229 阅读 · 0 评论 -
C++模板 底层实现stack 实现vector(空间配置器)
(模板代码调用之前,一定要看到模板定义的地方,这样,模板才能够进行正常的实例化,产生能够被编译器编译的代码,所以一般。注意:模板代码不能在一个文件中定义,在另外一个文件中使用。不是编译器提供的实例化,而是用户提供的实例化。模板的意义:对类型也可以进行参数化。比如下面遍历器的实例化是有问题的。原创 2024-07-19 18:48:44 · 265 阅读 · 0 评论 -
深入学习STL标准模板库
4.在中间进行insert或者erase,虽然时间复杂度都是O(n),但是vector都是连续空间比较方便,deque的第二维内存空间不是连续的,所以在deque中间进行元素的inset或者erase,指令肯定更多,造成元素移动的时候比vector要慢。2.前中后插入删除元素的时间复杂度:中间O(n),末尾都是O(1), 前插deque O(1) vector O(n)deque特点:动态开辟的二维数组空间,第二维是固定长度的数组空间,扩容的时候(第一维的数组进行2倍扩容)原创 2024-07-18 22:38:51 · 875 阅读 · 0 评论 -
零拷贝技术
可以发现,mmap+write实现的零拷贝,I/O发生了4次用户空间与内核空间的上下文切换,以及3次数据拷贝。其中3次数据拷贝中,包括了2次DMA拷贝和1次CPU拷贝。sendfile表示在两个文件描述符之间传输数据,它是在操作系统内核中操作的,避免了数据从内核缓冲区和用户缓冲区之间的拷贝操作,因此可以使用它来实现零拷贝。其中3次数据拷贝中,包括了2次DMA拷贝和1次CPU拷贝。4次上下文切换(4次用户态和内核态的切换),4次数据拷贝(两次CPU拷贝以及两次的DMA拷贝)原创 2024-07-18 17:49:58 · 813 阅读 · 0 评论 -
explicit函数的作用
C++ 类的隐式类型转换是指当一个类定义了适当的构造函数或转换函数时,可以在需要时自动进行类型转换,而无需显式调用转换函数或构造函数。这使得代码更具灵活性和简洁性。1.避免混淆: 隐式类型转换可能会导致代码可读性降低,因此应该避免过度使用,并确保转换行为明确且易于理解。2.显式声明: 如果你想阻止某种类型的隐式转换,可以将转换构造函数声明为explicit,或者禁用类型转换操作符。3.性能影响: 类的隐式类型转换可能会影响性能,因为它可能导致不必要的对象构造和复制。原创 2024-07-18 16:45:39 · 290 阅读 · 0 评论 -
阻塞和非阻塞 同步和异步
陈硕大神原话:在处理IO的时候,阻塞和非阻塞都是同步,只有使用了特殊的API才是异步IO。原创 2024-07-13 17:09:47 · 203 阅读 · 0 评论 -
TCP三次握手四次挥手原理
TCP/IP 协议是传输层的一个面向连接的安全可靠的能建立一个安全可靠的连接,那么第一次握手是由客户端发起,客户端会向服务端发送一个报文,在报文里面:SYN标志位置为1,表示发起新的连接。但是对于服务端而言:两次握手是不够的,因为到目前为止,服务端只知道一件事,客户端发给我的消息我能收到,但是我响应给客户端的消息,客户端能不能收到我是不知道的。所以,还需要进行第三次握手,第三次握手就是当客户端收到服务端发送的确认响应报文之后,还要继续去给服务端进行回应,也是一个ACK标志位置1的确认消息。原创 2024-07-13 10:29:58 · 684 阅读 · 0 评论 -
RSA算法(C++)
RSA为非对称加密算法,由一对公钥和一对私钥构成,私钥加密公钥解密,公钥加密私钥解密。如下图,D为私密的,假设传输英文字母,我们给英文字母编号A=1,B=2,C=3…两对密钥产生方法如下。原创 2024-07-12 21:05:23 · 225 阅读 · 0 评论 -
函数调用的堆栈过程
【代码】函数调用的堆栈过程。原创 2024-07-09 14:07:51 · 149 阅读 · 0 评论 -
进程间通信(IPC)
管道是一个特殊的共享文件,属于操作系统(也就不是fork()的复制对象),两个进程通过进行读写通信1.管道的读取属于一次性动作,,普通管道只允许半双工通信,若要实现两个进程双向通信,则需要两个管道2.管道则需要先通过操作系统访问文件再获得内存数据。1.只允许有血缘关系之间的进程通信2.生命周期和进程关联301.可以在两个无亲缘关系的进程间通信2.生命周期独立于进程存在,直到最后一个使用它的进程关闭它或者显示删除该文件3.需要创建文件用于管道通信。原创 2024-07-08 22:29:38 · 1042 阅读 · 0 评论 -
C++编译链接原理
的段,无。原创 2024-07-08 21:31:55 · 817 阅读 · 1 评论 -
虚拟地址空间划分
指令段,因为局部变量编译之后不会产生符号存入符号表中,只会产生汇编指令(:存放未初始化或初始化为0的数据,操作系统会将数据段.bss部分清零。),只有当运行时,才会在栈上开辟四字节空间存放局部变量的值。每一个进程的用户空间是私有的,内核空间是共享的。:程序搜索头文件和库文件默认的搜索路径。:存放局部变量的值,函数参数和返回值。加载共享库区:用来存放加载的动态库。:空闲区,程序动态分配的内存区域。或许会疑惑,局部变量为什么属于。:存放已初始化且非0的数据。:指令段,存放汇编指令。原创 2024-07-08 17:46:06 · 198 阅读 · 0 评论 -
主流I/O模型总结(Linux Windows)
【代码】主流I/O模型总结。原创 2024-07-06 22:41:14 · 276 阅读 · 0 评论 -
ubuntu常用命令
进一步解释:前台进程直接与用户交互,能够接收来自终端的输入,并且通常会阻止终端执行其他命令直到该进程终止。在 ps 输出中看到 + 符号,它标识了当前终端下处于活动交互状态的进程。对于UDP,因为它是无连接的,这一列通常为空或不显示。(进程ID/程序名称): 如果使用了 -p 参数,这一列会显示占用该端口的进程的ID以及可选的进程名称。如果很高,可能表明进程处理数据的速度慢于接收数据的速度。显示连接使用的协议,通常是 “tcp” 或 “udp”。进程的ID,是进程在系统中的唯一标识。原创 2024-07-06 16:08:33 · 554 阅读 · 0 评论 -
VMware虚拟机配置桥接网络
然后按下图,依次选择2处桥接模式,桥接位置3处选择你的。:VMnet0代表"桥接模式"的虚拟交换机,虚拟主机与真实主机地位完全相同,因此必须给虚拟主机配置相应的IP地址等,当然也可以使用DHCP服务器动态分配IP地址。以win10为例,点击右下角网络和Internet设置-更改适配器选项,找到连接外网的网卡(我的就是下图中2位置的),右键-属性,在WLAN属性中选中。接着选择IPv4页面,如果使用DHCP模式,直接选择DHCP模式,点击应用(如下图),设置即可完成,此时应该大功告成,可以上网啦。原创 2024-07-06 15:12:15 · 914 阅读 · 1 评论 -
Ubuntu安装redis
以下界面安装成功:当前状况:由于当前端口对应的 ip 127.0.0.1 是环回 IP,只能由当前主机上的客户端访问,跨主机就访问不了实际需求是其它主机也能够访问到,所以需要修改当前端口对应的 ip修改前出现以下界面即可以正常工作。原创 2024-07-06 11:28:21 · 306 阅读 · 0 评论 -
ubuntu下载Nginx
如果您是通过源码编译的方式安装Nginx,配置文件通常位于Nginx的安装目录下的conf目录中。例如,如果Nginx安装在。打开浏览器访问本机80端口,即访问:http://localhost:80。出现该界面证明nginx启动成功,可以使用nginx进行下一步的配置啦。3.测试nginx是否启动成功。,配置文件路径通常是。原创 2024-07-06 10:06:56 · 379 阅读 · 0 评论 -
vscode远程连接linux(配置免密)
1.首先保证物理机和虚拟机网络可以ping通2.查看ubuntu得ip地址ifconfigIP为:192.168.52.1333.连接远程主机。原创 2024-07-05 23:32:00 · 168 阅读 · 0 评论 -
xlib教程
本人学习xlib的知识分享。原创 2024-05-16 13:22:44 · 373 阅读 · 0 评论 -
git上传项目至github(Linux)
git init创建版本库创建一个版本查看版本记录版本回退一个版本回退二个版本回退到指定版本(版本号上述commit黄色字体)其中HEAD表示当前最新版本,HEAD^表示当前版本的前一个版本,HEAD^^表示当前版本的前前个版本,也可以使用HEAD-1表示当前版本的前一个版本,HEAD-100表示当前版本的前100版本git reflog查看操作记录(前面黄色字体对应版本号):电脑中的目录,上面的git_test/:工作区的隐藏目录.git是git版本库git status:查看当前工作树的状态。原创 2023-11-08 19:30:39 · 626 阅读 · 0 评论 -
Linux环境下C++配置Json库
1.创建一个json文件夹,使用Xftp将压缩包导入文件夹。3.进入到 jsoncpp-src-0.5.0目录中执行。进入scons-2.1.0目录中执行。下,并为了方便使用,将其重命名为。5、拷贝出Json的静态链接库。目录下的json文件夹拷贝到。4.拷贝出Json的头文件。1、下载Jsoncpp。9 编译链接时 要加。原创 2023-10-24 10:21:49 · 492 阅读 · 0 评论