- 博客(30)
- 收藏
- 关注
原创 C++ 多态详解:从静态多态到动态多态
从字面上理解,多态就是“多种形态”。在程序设计里,它指的是:使用,却可以对做出不同的具体行为。virtual。
2025-12-04 15:53:14
1052
原创 C/C++中的extern关键字详解
像上面讲的那样,编译期编译器只需要知道这些变量/函数是定义在其他地方的,链接的时候将extern_main.o和extern_other.o链接在一起,就可以找到这些变量/函数的具体地址。所以extern关键字的作用就是在编译期告诉编译器,这个变量/函数是其他地方定义的,此时编译器也不需要直到具体是在哪里定义的,链接阶段会找到extern关键字修饰的变量/函数的真正地址。extern是c/c++语言中的一个关键字,用在变量或函数前面,作用是说明这个变量或函数是在别处定义的,要在此处引用。
2025-11-06 13:55:46
441
原创 C++中malloc、free和new、delete的区别
malloc、free是c语言中的库函数内存操作malloc函数接收需要分配的内存字节数,如果内存足够,可以成功分配,会返回指向内存块起始位置的指针free函数释放指针指向的内存,接收的参数是需要释放的内存的首地址用法实际上,在调用malloc之后,返回给用户的指针指向的地址的前面还有一段元数据,这部分元数据记录了内存块的大小等数据元数据的大小是固定的,所以在调用free函数的时候会先找到这部分元数据,获得内存块大小之后再执行释放内存。
2025-11-04 21:07:20
324
原创 c/c++ static关键字详解
static关键字作用在函数体内部的变量,也就是局部静态变量不同的局部变量存储在栈中而被static修饰的局部变量存储在静态存储区中,即使函数退出,他也不会被销毁上面例子可以发现,a和b的地址是紧邻的,而和他们声明在一起的c的地址则没有普通局部变量在进入函数时创建,退出函数时销毁静态局部变量在程序启动时分配内存,在程序结束时释放,它的生命周期贯穿整个程序局部静态变量,名字已经很清楚了,他的作用域只能是在这个函数内部,函数外是无法访问的。但是每次调用这个函数的时候,访问的都是同一个静态变量。
2025-11-02 13:38:56
428
原创 c/c++ const关键字详解
const修饰基础数据类型的变量,如,就是声明一个常量,不能修改该变量的值c语言中,const只是一种编译器约束,它告诉编译器:“不要通过变量名修改这个变量的值”,但是并没有实现真正的只读内存保护,c语言中是可以通过指针修改const变量的值的,甚至可以通过强制类型转换修改const变量,但这些都是未定义行为而c++ 中const具有更强的类型约束和访问保护,编译器通常会将全局或静态const对象放入只读内存区(但标准并未强制要求),从而在语义上和物理上都防止修改。
2025-10-31 18:23:36
312
原创 红黑树详解
普通二叉树的删除底层节点的删除直接删除,没有影响非底层节点找左子树最大或右子树最小来代替自己,最后删除底层节点所以发现,二叉树的删除其实都发生在底层最后需要明确,红黑树的删除,第一步也是将对于非底层节点的删除进行转换,将其与其前驱(左子树最大节点)或者后继(右子树最小节点)进行交换,此时就会变成删除底层节点或者删除一个只有一个子节点的节点。
2025-10-17 21:43:29
793
原创 Redis(四)——Redis主从同步与对象模型
当redis管理的内存达到了上限,想要继续操作但是没有了内存,此时会触发淘汰机制,可能会淘汰部分数据来写入新数据,但默认策略是不淘汰任何数据,返回错误给客户端。
2025-10-09 20:52:32
625
原创 Redis(二)——Redis协议与异步方式
普通的redis交互(非pipeline):(1)客户端发送一条命令(2)redis服务器执行命令并返回结果(3)客户端收到结果后发送下一条命令pipeline:允许客户端将多条命令一次性发送给服务器,而不是一条一条,redis会依次执行这些命令并将结果一次性返回:pipeline不具备事务性。
2025-10-08 17:03:48
994
1
原创 Linux网络编程基础API
字节序分和可以使用下面程序判断自己电脑的字节序现代PC多采用,因此小端字节序又被称为。因此大端字节序也被称为下面四个函数可以进行主机字节序和网络字节序之间的转换上面几个函数中,h代表host本地,n代表network网络,l代表long32位数字,s代表short16位数字。所以htonl就表示将32位本地字节序整数转网络字节序。
2025-08-25 20:30:55
680
原创 《UNIX环境高级编程》Chapter11——线程
典型的UNIX进程可以看成只有一个控制线程:一个进程在某个时刻只能做一件事情。有了多线程之后,程序设计就可以把进程设计成:在某个时刻能做不止一件事情,每个线程处理各自独立的任务多线程不等于多核编程。即使在单核处理器上,也能够使用多线程;对于多线程任务,如果某个线程阻塞了,那么其他的线程也可以执行,而不会像单线程那样阻塞整个进程;每个线程都包含有表示执行环境所必须的所有信息,包括:进程中标识线程的线程ID、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、errno变量、以及线程私有数据;
2025-08-24 21:41:41
423
原创 tcpdump使用讲解
加上具体某个协议的某个端口,就可以更加精确的捕获对应的数据包。:对标准输出进行行缓冲,使标准输出折别遇到一个换行符就马上把这行内容打印出来,在需要同时观察抓包打印以及保存抓包记录时很有用。:count,指定收到数据包的次数,即在收到指定数量的数据包之后退出tcpdump,停止抓包。:在输出行打印除数据链路层的头部信息,默认情况下不显式数据链路层的信息,使用。如果你非常明确关心的是哪个主机的收发报文,就可以直接过滤那台主机的数据包。:write,将捕获到的信息保存到文件中,不打印在屏幕中。
2025-08-24 17:05:02
1088
原创 《UNIX环境高级编程》Chapter5——标准I/O库
如若在未定向的流上使用一个多字节IO函数,就将流定向为多字节,如若使用一个单字节的,就定向为单字节。流的定向决定了所读写的字符是单字节还是多字节的。对于二进制IO操作,我们可能更多的用于读写一个结构,此时按行读写或者按字符读写都不太合适,一次读写一整个结构更合适。记录文件位置,这种数据类型可以根据需要定义为一个足够大的数用于记录文件位置;,与上面两个的区别是文件偏移量不再是长整型,变成了。标准IO提供缓冲的目的是减少系统调用的次数,如。,用于将流设置到文件的起始位置。,文件的位置存放在一个长整型。
2025-08-18 10:15:53
259
原创 《UNIX环境高级编程》Chapter3——文件I/O
有缓冲的IO,数据读写先经过用户空间的缓冲区,等缓冲区满了或手动刷新,才调用底层的系统调用;:没有缓冲的IO,每次进行读写,直接发起系统调用;二者的区别在于有缓冲的IO进行系统调用的次数明显少于无缓冲IO,从而效率更高;本文要讲的文件IO属于无缓冲的IO。
2025-08-15 21:37:25
872
转载 转载:Linux内核Makefile系统文件详解
什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows 的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile 还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。因为, makefile关系到了整个工程的编译规则。
2025-08-07 11:18:53
54
原创 Linux基础命令
与more功能类似的还有less,less比more功能更强大,less可以通过。pwd,print work directory,输出当前的工作目录。mkdir,make directory,创建目录/文件夹。which,查看所使用的命令的程序文件存放的位置。tail,查看文件尾部内容,跟踪文件最新更改。more,查看文件内容,支持翻页查看。rm,remove,删除文件/文件夹。查看下一页,不支持查看上一页,点击。cp,copy,复制文件/文件夹。mv,move,移动文件/文件夹。cat,查看文件内容。
2025-07-14 13:02:52
666
原创 详解内存池
将程序中需要经常使用的核心资源先申请出来,放到一个池内,有程序自管理,这样可以提高资源的利用率,也可以保证本程序占有的资源数量,经常使用的池化技术包括内存池,线程池,和连接池等;:内存池是一种用于管理和分配内存的技术,它通过预先申请一块固定大小的内存空间,并将其划分为多个小块,提供给程序按需分配和释放。
2025-07-13 15:18:44
413
原创 《Effective C++》条款4:确定对象被使用前已被初始化
为内置型对象进行手工初始化,因为c++不保证会初始化他们构造函数使用初始化列表来初始化成员变量,而不要在构造函数内对他们另外赋值。初始化列表中变量的出现顺序尽量和他们的声明顺序相同为免除“跨编译单元的初始化次序”问题,使用的方式以对象替换对象。
2025-03-06 21:49:16
1030
原创 《Effective C++》条款3:尽可能使用const
将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体编译器强制实施,但你编写程序时应该使用“概念上的常量性”当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可以避免代码重复。
2025-03-05 18:10:54
782
原创 详解线索二叉树
二叉树本身不是一种线性结构,但是通过遍历,我们却可以将其导出为一个线性序列,在这个线性序列中,每个节点(除第一个和最后一个)都有它的和,通过每个节点的前驱和后继,我们也可以很快的得到这棵树的一个线性序列,所以将前驱和后继称为想要快速找到每一个节点的前驱和后继,我们可以在每个节点中加两个信息,指向前驱的指针和指向后继的指针,这样做的问题是浪费大量空间;发现,原来节点的leftChild和rightChild指针其实有很多是没有利用起来的,我们可以在这些空指针域中存储前驱和后继。
2024-11-22 16:20:36
954
原创 二叉树的遍历——先序、中序、后序、层序
不同点在于何时访问一个节点的值。对于中序来说,则是先访问当前节点的左子树,当左子树处理完之后,再访问当前节点,最后访问右子树;这里我们不直接按照上面的思路求解,这里十分巧妙的发现了一个点,就是将先序遍历的顺序改成访问完当前节点之后先访问右子树再访问左子树,得到的结果就是后序遍历的反转,将这个反过来就是后序遍历,代码如下,假定。后序要难很多,基本思路是:从根节点开始,沿左子树一直向下,直到没有左孩子,但是此时还不能出栈,因为如果当前节点有右子树,还需要先访问右子树,直到右子树也全部访问完成才能让栈顶出栈。
2024-11-21 18:08:24
653
原创 数据结构-稀疏矩阵的快速转置
稀疏矩阵是矩阵的一种特殊情况,其中非零元素的个数远小于零元素的个数,且元素的分布没有什么规律,如图稀疏矩阵如果采用二维数组存储,将会浪费很多的空间,因此稀疏矩阵采用了一种只存储非零元素的办法,具体来说是使用三元组来表示一个矩阵元素,而稀疏矩阵使用三元组数组来标识三元组的定义如下由此得到的稀疏矩阵类的声明如下,我们接下来主要探讨它的转置。
2024-11-18 23:50:44
439
原创 使用oh my posh美化powershell及wsl
主题网站找一下就会发现这是其中一个主题的名字,想要更改主题只需要修改这里,选择你想要的主题,用主题名字替换掉这几个字母即可,然后保存这个文件,重新打开。的设置页面,左侧找到“默认值”(或者指定某一个终端),点击“外观”,在字体那里找到刚刚下载的字体,注意是包含。页面应该可以看到已经和之前不同了,但是可能会出现乱码,如果出现乱码,这是字体的问题,通过下一步更换字体即可。选择一个喜欢的字体,点击下载,下载完成之后得到一个压缩包,解压压缩包,全选所有的。的字体,然后保存,此时再查看你的。
2024-11-03 18:50:29
1143
原创 traits编程技法——STL源代码门钥
传入的参数是一个迭代器(指针),我现在想要获得这个迭代器所指之物的数据类型(可能是在函数中定义变量,可能是作为返回值),该如何操作?而对于内置数据类型的指针,我们定义变量的时候用的是自定义数据类型的指针,而我们要的是这个数据类型,如果写成下面这样,显然不是我们要的。参数的函数,这样当我们调用函数传了其他类型的迭代器的时候,编译器发现没有找到“最匹配”的函数,就会循着这个继承关系找到接受。是有符号的,在64位机器上是8个字节,常用于数组索引、迭代器等,特别是在计算指针之间差值的时候,如。
2024-10-31 00:04:02
899
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅