- 博客(123)
- 资源 (5)
- 收藏
- 关注
原创 ICMP Fragmentation needed抓包实例
并且响应的报文最大字节是576,组成内容为 IP头部(20) + ICMP头部(8) + 不分片包的IP头部(20) + 不分片包的TCP头部(20) + 不分片包的剩余数据(508)IPv4 以太网最小MTU是576,故当包设置不分片并且超过交换机最大MTU时会响应ICMP Fragmentation needed报文。
2025-03-04 10:14:17
213
原创 jemalloc替换标准库 malloc等函数的三种方式
这种做法是侵入式的,如果没有jemalloc库将无法启动程序,另外编译代码时需要设置。可以做到无侵入式替换,只需要在运行程序前设置。侵入式的,并且存在一定的不安全性。
2024-10-28 17:45:16
518
原创 TCP simultaneous open测试
流程梳理:客户端A (127.0.0.1:12999)、客户端B(127.0.0.1:13999)经过多次测试,延迟 5 - 20 微秒的概率会增大,如tcpdump的图,12999发送。公网环境存在传输时间,如果同时发送理论上能连接上的概率更大。状态,否则就会因为是客户端性质而收到RST信号。由于两个套接字是客户端性质,必须保证同时处于。状态,此时B在延迟1ms后发送。,间隔了 23 微秒。
2024-10-25 18:19:08
409
原创 golang 字符串浅析
a和b所指向的字符串的地址在只读段,故当放开21行尝试修改内存时,会触发。查看程序在linux的内存分布。信号,导致程序异常结束。
2024-09-12 16:51:59
587
原创 Linux 调用std::call_once崩溃问题
判断是否支持多线程,弱引用意味着如果在链接时找不到 __pthread_key_create,这个引用不会导致链接错误,而是会被替换为 NULL 或者其他默认行为。但是使用-lpthread会发现它链接不上,-l只影响链接阶段,让其在pthread找到使用的符号文件,如果没有找到,则忽略-lpthread。其实问题就出现在有没有链接pthread库,gcc使用的pthread_once函数执行,故需要链接pthread库。没有链接编译时也不会报错,运行时异常描述也毫无作用,无法分析。
2024-08-13 12:01:55
380
原创 liburing和Linux io_uring源码阅读
此源文件内部调用liburing相关函数包含。篇幅过长,走不到的地方将会对其进行裁剪。以此为起点,阅读内核代码。
2024-06-27 18:23:39
666
原创 纤程与协程以及有栈协程和无栈协程的区别
无栈协程的做法靠的是C语言特性switch case嵌套do while,这一做法也被称作duff device(达夫设备),通过Switch跳转至上次运行的地方,当下程序的运行需要依赖寄存器,函数执行过程中如何跳转到其他函数,在没有协程的情况下可通过return,直接调用其他函数实现,但这中做法无法恢复执行原来的函数。2、协程是语言级别的,如go,rust,C#等提供的协程,c++如libco,libaco,boost::coroutine等等。,但是在概念上,两者是有区别的。已进行详细描述,不在赘述。
2024-06-22 10:21:17
498
原创 如何在没有头文件的情况下调用动态库的类的私有成员函数
所以需要使用dlsym获取到地址,但是g++在编译时会对函数名称进行修改,如上所示。故传递时需要传修改后的名字。然这么写在编译时确实没问题,但是动态加载的情况下又没有类的头文件,则无法这么写,因为无法确定函数的地址。注意:以上不涉及虚函数时可正常使用,当存在虚函数时,会存在虚函数表,无法确定被调用函数真正的地址。另一方面,类的成员函数即使在书写时无参,那么编译后其实也存在参数的,即类的this。普通函数的调用方式为直接调用,如createClass。所以在生命函数时将其声明为。调用也就和普通函数一致。
2024-05-11 13:14:42
1119
原创 范围for循环依赖begin和end函数
无论标准库还是其他库,多余begin和end函数的处理都用于迭代器的实现,而迭代器又要求使用过程中不能修改原有结构。所以在范围for循环中,不能删除和插入数据。否则,极易产生崩溃问题。如果需要在循环过程中修改结构,可以自己使用迭代器进行遍历。修改begin和end函数名后再次编译,报出以下错误。
2024-01-18 10:46:26
522
原创 git常用命令总结
/ 使用以下命令(请将 <commit_hash> 替换为之前找到的SHA值, <directory_path> 替换为被删除的文件夹路径)// 将远程主机 origin 的 master 分支拉取过来,与本地的 branch 分支合并。// 将dev分支代码合并到当前所在分支,冲突后使用git status命令查看冲突。// 查看删除前的Git日志记录,找到删除该目录前的最后一次提交。// 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。// 列出远程存在的分支。// 删除name分支。
2023-12-09 20:12:23
517
原创 安装其他版本gcc的办法
切换到国内的源是因为国内镜像下载速度快, 并一个原因是可能不存在想要的gcc版本。会看到各个版本的gcc, 选择自己想安装, 不存在则切换镜像源。通过以上指令可以查看有哪些gcc版本可供下载。从gcc.txt中搜索。在此我选择阿里云的源。
2023-12-09 19:44:17
343
原创 frp V0.52.3 搭建
的配置文件,以下12000、8500需要在云服务器中的防火墙中开放tcp。以下12300、12400需要在云服务器中的防火墙中开放tcp。此版本暂时没有windows的,想在windows使用请下载。客户端同样,只不过修改路径及配置文件即可。配置完后先在服务器启动,后启动客户端。以下是使用finalshell演示。随便使用一个ssh工具登录到。输入内网机子的用户名和密码即可。
2023-11-25 12:28:27
1071
原创 gcc标准库行为细则
有个16字节栈区空间,假如写入的字节数不超过15,是存放在栈上的,不会malloc内存。作用是修改当前字符串长度,会扩容但不会缩小空间,想要缩小空间可在resize后调用。需要注意的是join和detach都会抛出异常,并且都是线程不安全的,会对。函数会修改长度变量还会将首个字符初始化。初始化成某个值要看编译器的行为。未采用读时共享写时复制的思想。即会对原来的内存拷贝一份。用的posix线程库接口,pthread。方法做到可接受任意参数和返回值的函数。实际上不会减少空间,比如本来。返回错误,然后抛出异常。
2023-11-12 15:05:37
227
原创 C/C++不同编译器对数组为0和void的处理
但是在写代码时为了兼容各种编译器,会见到在数组末尾形如char array[1]的写法,这也是一种方法,不过这种方法会因为内存对齐,导致结构体实际占用更大的空间,如下代码,将0换成1后。将数组放在结构体末尾,可以用做变长数组,动态决定数组的实际大小,即使未使用,也不会占用结构体空间。
2023-09-14 15:37:42
337
原创 Lambda表达式
Lambda表达式是一种匿名函数,它可以被用作变量或参数传递给其他函数。在C++中Lambda表达式是一个重载了括号运行符的类。
2023-09-02 09:22:50
239
原创 如何使用curl下载github代码
如图,有那个下载图标时表示不需要鉴权即可下载,一般仓库都会开放只读权限,所以很大概率都有。那么我就需要知道它在哪个IP中,按下F12打开网络,点击下载图标。crc32.c是文件在仓库中的相对路径。比如我想下载这个crc32.c文件。madler是GitHub用户名。zlib是存储源文件的仓库名称。master是分支名称。使用如下命令进行下载。
2023-07-20 09:48:45
1924
原创 std常用的模板元编程
在这个示例中,我们使用 std::is_same 分别对四组类型进行判断。第三组是 std::string 和 const char*,它们虽然有一些相似之处,但它们并不是同一种类型,所以 is_same3 的值为 false;最后一组是 std::string 和 std::string,它们的类型完全相同,所以 is_same4 的值为 true。在这个模板类中,我们使用了 std::conditional_t 宏,如果 UseFloat 为 true,则选择 float 类型,否则选择原始类型 T。
2023-07-15 08:04:15
536
原创 QML实时加载图片的方式
这种方式需要和qml的Image配置使用,它是通过改变Image的source达到实时改变图片的效果。效果就是点击一次切换一次图片,图片随机显示。
2023-06-11 13:34:40
800
原创 c++类型注册到QML中
截止到我写这篇博客时,我所知道的注册到QML有两种方式,一种是,另一种是通过注册。两种方式各有优缺点。下面分次介绍,并综合对比。
2023-05-20 11:04:45
1581
1
原创 QML插件的创建及调用
1、可以将qml文件放在qmldir中进行声明。大家可以看下QT提供的qml文件,也是这样放置的。此种方式需要将qml文件和qmldir放在一起。比如qml是存放各种插件的,其中有个插件叫。2、在main.qml导入module。那一行的名字,版本是由QT默认生成的。此种方式只需要携带qmldir即可。1、在main函数添加导入路径。路径需要是qml文件上两层目录。将qml这层的路径添加即可。module是qmldir的。那么qml必须有个文件夹是。
2023-05-13 08:34:08
877
原创 linux下coredump文件产生及分析
cordump是程序崩溃时产生的包含一些堆栈,寄存器信息的文件。windows下如何捕获并分析已做说明,在此只做linux下的说明。
2023-03-15 12:03:48
1972
原创 模板静态成员变量需要使用才会构造
今天在写单例模式时,计划使用隐藏类的析构来释放内存,之前一直采用的注册方式(atexit)。但是在使用valgrind检测内存泄露时发现出现了error,之前使用注册方式从未出现。于是在隐藏类的析构加了printf,发现未输出,于是在构造又加了printf,发现也未输出。可想这个类没有发生构造,但是相比于其他静态变量,其他静态变量都是正常的,唯一的不同点在于这个隐藏类变量从未使用过。
2023-03-06 16:56:09
161
原创 c++11特性与c++17特性
作用类似union,但是比union更加方便。std::variant只包含模板参数中的一个类型的值,当转换为其他值时会抛出异常。std::string_view对指向的内容是只读的,其操作是对指针的偏移,所以性能比std::string高。编译期如果满足条件,则只对if的内容进行编译,省去else的编译,反之只编译else内容。std::variant是一个变参模板类,可以存放更多的类类型,而不仅限于基础类型。
2023-02-21 10:46:51
7329
install.zip
2020-04-10
pthreads.zip
2019-10-10
MinGw-win64
2019-05-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人