- 博客(15)
- 收藏
- 关注
原创 在windows上通过gdb-multiarch和gef插件调试安卓程序
编辑后重新打开msys2或source ~/.bashrc,输入 gcc --version 能看到版本号就说明没问题了。并在msys2\home\用户\ 中创建.gdbinit文件,内容为。4、把 mingw64 路径加入 msys2 运行环境。2、使用msys2安装gdb-multiarch。6、使用msys2打开gdb-multiarch。找到msys2\home\用户.bashrc。运行msys2目录下的msys2.exe。下载解压到msys2\home\用户。1、下载msys2并安装。
2024-11-16 13:31:00
341
原创 C++类模板
如果想通过堆栈去存放整数和浮点数,那么就需要实现两个堆栈类,有了类模板的概念后,就只需要实现一个堆栈类。使用类模板可以提高开发效率和代码量,但是类模板的具体实现需要在头文件中且代码可读性不强,调试比较困难。
2023-01-04 21:25:04
129
原创 【OnlineJudge/WebServer】Poller/EventLoop/Channel
Reactor是一种常用的高性能网络模式,本项目通过Poller/EventLoop/Channel来实现Reactor高性能网络模式WebServer以Reactor为高性能网络模式,其主要以Poller/EventLoop/Channel三个类实现,Poller充当IO多路复用,Channel充当事件分发器,EventLoop充当事件循环作为Poller和Channel之间的中间桥梁,更详细的代码请在GitHub中查看。
2022-12-29 19:08:22
298
原创 类的各种成员函数及区别
C++中,成员函数可以分为普通成员函数、静态成员函数和const成员函数静态成员函数里只能使用静态成员变量const成员函数不能修改成员变量,普通对象和const对象都能调用const函数。
2022-11-30 13:08:06
639
原创 高性能网络模式Reactor
在网络编程中,服务端想与多个客户端通信,需要为每个连接分配一个线程/进程,线程比进程轻量,一般多使用线程。当一个连接建立后,为其创建线程/。当一个连接关闭后,对应的线程也需要销毁。不断的创建线程和销毁线程会占用大量资源,所以会使用线程池去复用线程资源,先创建出一定数量的线程,等到一个连接建立后,为其分配线程,连接关闭后,再将线程归还给线程池。我们通常使用read函数去接收连接中的数据,直到数据读完线程阻塞(block IO)在read函数中,这样会导致线程不能处理其他事情,占用资源。
2022-11-28 20:59:04
600
原创 【OnlineJudge/WebServer】HttpRequest
HTTP报文解析可以说是Web服务器的核心,本文主要讲解HTTP请求报文格式和主从状态机关于HttpRequest的实现,难点在于处理TCP粘包和分包的问题,这里用了主从状态机能够处理部分问题,还有待完善的空间,代码的具体实现也在我的GitHub项目下的HttpRequest类中。
2022-11-28 11:32:05
498
原创 const限定符
在C/C++中,当一个变量被const修饰,可以称其为常量1、const,在C语言中更像常变量,在C++中要分编译时期和运行时期看待,编译时期为常量,运行时期更像常变量。2、const和一级指针结合应用,const修饰离其最近的类型,const后面没有*可以直接忽略const。
2022-11-27 16:08:15
420
原创 【OnlineJudge/WebServer】Buffer
WebServer接收Client发送过来的数据,存放在哪里?WebServer向Client发送数据,又存放在哪里?项目中的Buffer类就是用来解决收发数据存放位置的问题。在TCP和non-blocking IO中,我们通常需要一个应用层缓冲区来收发数据,本文中的Buffer充当应用层缓冲区,他的实现与队列类似。有关Buffer更加详细的解释,可以看下陈硕的这篇文章Muduo 设计与实现之一:Buffer 类的设计。
2022-11-27 00:12:14
898
原创 初始化列表
创建对象时,初始化成员变量操作一般是在构造函数的函数体中进行的。C++比较特殊,专门为初始化成员变量提供了另外一种操作:初始化列表。如果当前类通过组合的方式使用其他类,并且需要初始化其他类中的成员变量,可以在初始化列表里调用其他类的构造函数(这里如果是通过继承的方式使用基类,也可以在派生类中的初始化列表中调用基类的构造函数)public :int day_;};};在C++中,如果需要在构造函数中初始化成员变量,可以在初始化列表中进行初始化。
2022-11-25 17:13:01
1171
原创 malloc/free和new/delete
在C语言中,通过malloc申请堆内存,free释放堆内存。在C++中,也可以通过C语言的方式申请堆内存并释放堆内存,还可以通过new申请堆内存delete释放堆内存。new/delete是运算符,在C++中,运算符是可以重载的。如果你需要用自己的一套策略去管理堆内存,可以考虑重载new/delete的运算符,实现对象池。malloc申请堆内存失败返回空指针,new申请堆内存失败抛出bad_alloc异常,在实际开发中需要注意下。
2022-11-16 09:33:46
663
原创 【项目】Online Judge(在线评判系统)
由于本人将后端开发作为学习方向,在学习了网络编程和数据库后,决定开发Online Judge(在线评判系统)作为项目将所学的知识串联起来。通过Online Judge项目能学习到什么?1、C++2、网络编程3、数据库4、Linux系统编程。
2022-11-15 21:49:17
3753
2
原创 函数重载和extern“C“
c++允许函数名相同的函数存在,并且可以引用c语言中的函数函数名相同、形参列表不同的一组函数称为函数重载C语言和C++产生符号的规则不同,C语言按照函数名产生函数符号,C++按照函数名和形参列表产生函数符号。
2022-11-10 16:04:38
487
原创 内联函数(inline)
C++中用于减少函数调用开销的函数-------------内联函数如果一个函数简单,可以考虑将其内联,减少函数调用开销,提高运行效率。
2022-11-09 20:03:47
760
原创 进程空间内存分布及编译过程
学习c++前需要先了解一些底层知识,本文主要介绍进程空间内存分布和编译过程(x86 32 Linux平台下)本文仅仅简单介绍了进程空间内存分布及编译过程,想要深入了解可以阅读《程序员的自我修养》和《深入理解计算机系统》
2022-11-04 12:01:34
1527
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人