- 博客(96)
- 收藏
- 关注
原创 c++malloc出来的对象调用构造-------定位new
前言:之前在搓高并发内存池的时候就在想,类对象不能调用自身的构造函数,那直接申请内存出来的类对象岂不是很难受,然后我这两天仔细研究了一下,发现其实构造函数也可以显示去调用,而且含不限量,故做此文。看一下反汇编,按我的水平进行一次粗浅的理解的话就是去调用一个拷贝,然后调用构造,较于普通new的话不需要额外开辟空间(想了解更仔细的话可以问问ai,不要信我胡诌的)看到调用构造函数时obj的值与a的值是相同的,所以它的底层其实是偷偷摸摸去调了构造,然后把a拷贝给obj。在c++中一个类对象不能直接调用自身的构造。
2025-03-24 20:11:19
397
原创 [网络][tcp协议]:tcp报头
tcp(传输控制协议)是一种面向字节流的传输层协议,相较于udp协议,tcp能保证传输数据的可靠性与准确性,tcp也是目前最常见的传输层协议。:随着网络通信的复杂性增加,可能需要引入新的控制标志来支持额外的协议行为。:保留位可以用于支持TCP协议的扩展,例如在某些特殊场景下,用于标记报文段的优先级或特殊处理需求。:保留位的存在为未来协议的扩展提供了灵活性,使得TCP能够在不完全重新设计协议的情况下引入新特性。注:保留6位和6位标记位是目前最普遍的写法,在我查资料时,发现有一些拓展情况,会在后文细说。
2025-03-16 19:18:31
1098
原创 [c++] any类
我看ai和一些资料上写的是引用返回和指针返回,但是我去翻了VS下的源代码,没有传值返回时明显不是引用,或许是其他版本里返回的是引用?总之同志们要用的话注意版本。any类是c++17标准库中引入的一个类,any类既可以用于存储任意类型的数据(但是不能进行运算),也保留了c/c++类型安全的特点。如果更改类型的话会有野指针的问题,单纯改为同类型的值则没有问题。使用any_cast函数进行访问数据。其余接口意义不大不详细介绍了。emplace用于移动构造。是否为空以及类型检测。
2025-03-16 19:07:32
247
原创 [网络]url解码,从网址转化为ip
我们在学习网络时,底层代码中往往需要指定对应的ip进行通信,而网络上的资源大多是以网址的形式进行传输的,那么如何从网址变为ip呢。
2025-02-09 13:31:48
532
原创 取模与加减乘除原理,模拟实现代码及相关公式推导
计算(a + b)%N计算(a - b)%N计算(a * b)%N引入x,y . x = (a % N),y = (b % N)推导a = t1 * N + x,b = t2 * N + y;计算(a / b) % NN必须为质数!!!!除法写成这样看会舒服一点。
2025-02-03 14:19:11
327
原创 [网络]tcp通信协议接口函数及一些简易项目
tcp是最常用的传输层协议,面向字节流,相较于其他协议,如udp;tcp更为复杂,tcp额外提供了可靠的、有序的和错误检测功能的数据传输服务.简单点来说,tcp更复杂,数据也更可靠本文只是介绍tcp通信的一些接口,并不具体介绍tcp协议的内容以及各种策略。
2024-12-19 17:04:24
1023
原创 [网络] UDP协议底层介绍
本文主要介绍基于ipv4协议的udp协议udp 是一种传输层协议,用于进行网络通信,它的一些特点使他适用于一些特殊的网络通信,如实时直播,进程间通信。
2024-12-16 13:45:39
827
原创 [网络] UDP协议16位校验和
16位校验和是udp报头中的一个字段,绝大多数的教材和网课都会忽略这个字段,不去细究,我闲的蛋疼问了问ai,得到了一个答案,故作此文,以证明我爱学习之心惊天地泣鬼神(狗头。仅从作用来说,它会根据整个应用层报文进行运算,生成一个准确的数字,这个数字不能保证唯一性,但根据前面的udp长度,如果没有人为影响的话,大概率是唯一的。下,udp不能保证sendto 的数据一定被 recvfrom到,但是,只要recvfrom。当然也可以通过一些更上层的协议来保证数据的准确性。
2024-12-15 20:35:33
315
原创 [进程]守护进程
守护进程是一种在后台运行的特殊进程,一般来说,它会在服务器启动时开始运行,服务器结束时停止运行.守护进程不会自动退出,也不会随着终端,作业,进程组等外部环境改变而退出.守护进程特点制作不易,麻烦留给赞赞,如果能留言或者关注一下就更好了。
2024-11-20 17:20:06
929
原创 C++ lambda(匿名函数)捕获自己
今天写算法题时无意间遇到一种情况,我的深度优先遍历函数要在函数内调用自身,如果是普通函数没什么问题,但如果是 匿名函数 的话会有一些问题,甚至问ai,ai也没打上来,上网搜了半天,才找到这个的解答,故作此文。
2024-11-19 19:44:47
565
原创 1116蓝桥杯算法双周赛小白入门赛4.5.6题题解
除了自己以外,给每个人带一块钱 ========> 自己少一块钱 ========>nums[pos]--本人是很普通的大学生,算法水平并不高,不能保证解答一定是最好的算法,如果有错误或者更好的算法欢迎评论区讨论。能不能做到所有人的钱都一样 ========> 数组元素都一样。对于任意[n*n,(n+1)*(n+1)) 里的元素来说,需要%n == 0 才符合题意。给一个数组,代表一群人,数字代表每个人的钱。和为n * (3n +3)
2024-11-17 12:25:23
637
原创 [Linux][进程间通信] 命名管道
命名管道是一种进程间通信的方式,底层原理与匿名管道极为相似,本质是通过在磁盘上新建一个特殊的文件,然后通过这个文件来进行通信。命名管道的优势在于通信进程不需要有关系,直接通过文件路径找到管道文件,其他属性与匿名管道类似。mkfifo用于创建一个命名管道,第一个参数为路径,第二个参数为权限。多读端: 读端都会阻塞,写端写入数据后,仅第一个读端读到数据,不过所有读端都取消阻塞。命名管道本质是一个文件,如果要进行通信,直接open,然后read,write即可。命名管道多读端与多写端问题。
2024-10-25 15:28:27
442
原创 [Linux][进程间通信] 匿名管道
匿名管道是一直进程间通信的方式,底层很简单,使用起来非常方便,匿名管道有很多细节上的问题(4种情况,五种特征),且每次进行传输文件时有一个操作系统规定的最大值,传输大量文件时效率难以保证。
2024-10-20 17:45:52
509
原创 [Linux]动静态库
从代码角度来说,库就是代码中除了main函数所在文件以外的 .c/cpp 全部文件,程序在编译时会把main函数和库一起进行编译最后生成可执行程序从使用层面来说:一个项目可能由多个人来完成,如果我们要使用其他人(甚至是其他公司)的代码就需要拿到对应的源文件,这些源文件就是这个项目的库在Linux下 动态库后缀为.so 静态库为.a在Windows下 动态库后缀为.dll 静态库为.lib指令 ldd (可执行程序)
2024-10-20 14:42:56
822
原创 [Linux] 软硬链接
软硬连接是两种链接方式,目的是通过使用一个已有的文件,在不进行拷贝的情况下,可以在不同的路径下访问同一份文件软连接相当于快捷方式硬连接相当于引用计数软硬链接的目标也可以是软硬链接。
2024-10-13 20:47:31
273
原创 [Linux]文件系统
本文以ext2文件系统进行讲解演示,ext2是一个很老的文件系统,现在并不常见,不过作为示例用来增强对底层的理解是足够的。
2024-10-13 20:22:37
555
原创 [Linux][进程] 命令行参数
综上,当我们希望通过命令行进程来控制子进程的运行时,可以通过在命令行处传参并在子进程main函数内部接收的方式进行,子进程接收使用的argc,argv参数即为命令行参数。int argc,char* argv[] 这两个就是命令行参数,那么这些参数都有什么用呢。argv 二维字符数组,用来存储传入的命令行参数。有一些特殊字符不能通过命令行传参 如 &,(argc 有效的argv数量。
2024-10-02 13:14:40
362
原创 [Linux][进程][进程的七种状态]
进程状态是操作系统用来管理进程的一种手段,操作系统通过动态的调整进程状态来合理的分配资源,维护整个系统的生态。通过指令 ps ajx 来查看当前运行的进程。
2024-09-26 18:01:27
491
原创 [Linux][进程] 认识进程
进程是一个操作系统术语,用来管理与操作程序.在windows下打开任务管理器即可查看目前打开的所有进程PCB 进程控制块,从代码层面来说 PCB 是进程所有属性的一个结构体,在Linux源码中PCB指的是struct task_struct.Linux环境下: 进程 = task_struct + 代码 + 数据。
2024-09-23 19:31:10
347
原创 c++类型转换
c语言中,如果要操作两个不同的内置类型,需要用到隐式类型转换和强制类型转换,如果是自定义类型和内置类型,或者自定义类型和自定义类型,则无法操作。所以c语言的类型转换存在一些不方便和不易理解的地方,c++引入了一套更强大的类型转换机制。
2024-09-17 18:23:22
343
原创 c++特殊类设计
1. 拷贝,构造函数只声明不实现,声明为私有(c++98 常用)2.拷贝.构造函数声明为delete;(c++11引用 c++11及之后常用)c++库里的线程类就禁止拷贝。
2024-09-16 17:05:35
496
原创 c++智能指针
c++的类相较于c的结构体来说,在创建与销毁时会调用构造函数与析构函数,因此有人提出来了一种天才般的想法来解决c++的内存泄露问题,即在析构函数中进行内存释放-----智能指针即使基于这一想法实现的系统提供的智能指针在头文件<memory>下。
2024-09-15 16:48:56
557
原创 c++ 异常
在c语言中,当程序发生错误时,往往有两种处理方式,1.终止程序(杀死进程)2.返回错误码,这两种方式都有一些缺陷终止程序会让用户有不好的体验,而返回错误码会让程序过于庞杂繁琐。
2024-09-15 14:36:20
541
原创 c++ 线程库
在编程中,线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。线程自身不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可以与同属进程的其他线程共享进程所拥有的全部资源。使用线程,可以实现一段程序不同的地方并发的执行,极大的提高运行效率。
2024-09-14 15:46:24
954
原创 c++ 包装器
这三种方法实现功能相同但是由于本身类型不同所以不能相互赋值传参,很多时候为了统一类型会浪费大量的时间,这时候就体现出包装器的重要性了。总的来说,包装器用于统一函数,函数指针,仿函数,使之相互之间可以赋值,调用,进而使代码逻辑更为通畅。语法 function<返回值类型(参数类型,用逗号隔开)> f = .....;在c++ 中如果我们要实现一个整数比大小的功能有三种方法。头文件 #include<functional>函数,函数指针,仿函数都可给包装器赋值。
2024-09-14 13:18:18
255
原创 [Linux网络通信]socket函数
socket函数用于Linux网络通信,传入的参数为对网络协议的描述,会返回一个文件描述符,该文件用于网络通信,如果C/C++中0,1,2默认被使用,如果没有打开其他文件的话一般就是3在Linux环境下可以通过man 2 socket 指令查看Linux官方介绍socket的文档。
2024-07-16 13:32:10
715
原创 [c++] 可变参数模版
可变参数模板是C++11及之后才开始使用,学校的老古董编译器不一定能用相信大家在刚入门c/c++时都接触过printf函数printf用于将数据格式化输出到屏幕上,它的参数非常有意思,可以支持任意数量,任意类型的多参数.而如果我们想实现类似这种的传参,在C里似乎并不支持c++11提出了可变模板参数来解决这一问题。
2024-07-07 11:01:32
598
原创 [c++] 类型推导 typeid decltype auto
诸如python这类语言,声明对象和函数返回时都不需要显示声明类型,如果程序比较复杂很容易在函数多级传参时找不到返回值的数据类型,这时类型推导就是一件很有意义的事了,而c/c++中,函数的返回值类型都是显示传递的,不同类型之间还不能直接进行赋值,看起来类型推导是一件没什么意义的事情首先类型推导本身就是一件可以的事情,一些很复杂的类型,比如map嵌套一个string,一个set的迭代器可以直接用auto四个字母来代替其次 在c++14中,允许函数以auto做返回值,这种神似python的操作也很让人蛋疼。
2024-06-28 12:06:11
476
原创 [MYSQL] MYSQL表的操作
由图可以看出,表是库的一部分,所以有库才能使用表showdatabases;查看已有的库db_name;创建库使用usebd_name 使用库,之后对标进行增删查改就只会操作这个库里的而不影响其他库。
2024-06-27 17:14:08
493
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人