- 博客(45)
- 资源 (12)
- 问答 (3)
- 收藏
- 关注
原创 浅谈c++函数调用以及析构函数为虚函数的原因
巩固c++知识点,从编译器的角度看看程序的函数调用。简单的总结了一下函数调用,文章关于虚函数的内容,并没有进行详细的解释。如有好奇的读者,可参考:链接:浅谈c++虚函数。
2024-11-12 01:59:17
969
原创 浅谈c++虚基类内存布局
引入虚基类的原因是为了解决三层继承,爷爷类重复存在的问题。大概操作如下:普通继承:当通过子类对象给爷爷类成员变量赋值时会出现二义性。虚继承:子类中只有一个爷爷类避免了二义性。只有对虚基类的成员变量进行处理如赋值的时候,才会用到虚基类表–取其中的值用作偏移值,来进行虚基类成员变量首地址的定位运算。
2024-11-08 12:44:44
1009
原创 浅谈c++虚函数
记录自己复习的总结,方便后期巩固知识点。对于虚函数八股文的内容不进行阐述。主要从工作原理上进行分析。各种语法,只是对内存的操作方式。期望自己面对八股文的时候可以不用记特性。通过知道它的运行原理,推导出它的表象。看到一句源码,能明白它背后有很多不被人知的操作。
2024-11-06 15:54:20
979
原创 浅谈智能指针工作原理(std::shared_ptr、std::unique_ptr、std::weak_ptr、std::auto_ptr)
智能指针,老有人会问关于对它的认识。为了很好的回答这个问题。对智能指针 std::shared_ptr、std::unique_ptr、std::weak_ptr和 std::auto_ptr进行分析。在此做一个总结,对于智能指针的分析告一段落。`智能指针总是八股文的一部分,与其记住它的特性,不如知道它的工作逻辑,推导出所以然。记性总是很差,为何不去理解它的原理,感受它的趣味。
2024-10-25 17:00:19
883
原创 STL —heap算法源码刨析 make_heap、push_heap、pop_heap、sort_heap操作分析
heap的内部是一个完全二叉树,将极值存放在根节点。这个里的极值可分为最大值、最小值。根据极值意义的不同可分为大堆和小堆。为了方便解释,以下的讲解内容都以大堆(max-heap)的例子讲解。大顶堆:根节点(堆顶元素)是所有节点中的最大值(父节点都大于左右子节点)。小顶堆:小顶堆中的根节点是所有节点中的最小值(父节点都小于左右子节点)。如上图所示,A即为这个列表中的极值。在查找极值时极为方便。同时因为是一个完全二叉树,所以除了叶子节点外,其他的节点都存在。
2024-09-10 18:22:36
1192
原创 STL算法详细解剖——单纯数据处理函数
总结STL中,单纯的数据处理算法。了解算法背后的秘密,学习仿函数与模板函数组合的奥妙。减少日常开发的重复工作。提高开发效率。
2024-09-05 11:14:32
471
1
原创 操作字符串获取文件名字
操作字符串获取文件名字,输入:"D:/code/Test/Test.txt" 输出:"Test.txt" 或者 ”Test“
2024-06-03 10:01:01
537
原创 操作字符串获取文件路径
传入文件路径 ,获取文件的路径信息。输入"D:/code/Tools/a.txt" 返回字符串"D:/code/Tools/"
2024-05-30 17:50:00
275
原创 c++ Effective c++知识点
Effective c++ - 飞书云文档 (feishu.cn)
2023-09-24 18:36:54
97
原创 简单模拟vector的特性,同时浅谈erase操作后,迭代器失效的原因
在构造函数中,start和finish指针,指向开辟空间的首地址,end_of_storage指向最后的地址。push_back()函数,在传入值时,所占空间已满,开辟之前二倍的空间,并将之前的值拷贝到刚开辟的空间中,同时,释放原来的空间,finish指针向后移动。成员函数,此函数,在STLvector中,通过vs2015测试时,通过迭代器删除一个元素时,不管它“*”取值,还是++操作,都会崩溃。(至此,我在模拟时,也进行了位置的偏移),从这里可以看到,并不是因为野指针的缘故。............
2022-07-21 17:25:22
378
1
原创 工厂方法实现
手动实现工厂方法,支持对象的注册和删除。(注意在头文件声明的map,在.cpp中需要定义)//animal.h#pragma onceclass animal{public: virtual void run() = 0;private:};class Dog:public animal{public: virtual void run();private:};class Cat :public animal{public: virtual void ru
2022-04-25 16:50:18
220
原创 局部变量地址变化
在栈中,局部变量地址由高地址到低地址存放。int类型之间地址值相差12字节。int类型 与char类型 之间,位置的不同,地址相差的址也不同。通过查看栈上连续定义的int变量,地址相差12个字节_weixin_34220623的博客-优快云博客作者告诉我们 ,在地址前后有四字节的地址解释说明。通过以上结果可知,i,m(int类型之间)的地址相差12个字节。m,n(int 和char)之间相差9个字节。n,p(char和int)之间相差15个字节。同时,通过观察,数组最高位置,在p之下。因为P...
2021-11-05 11:02:49
780
原创 _stdcall 添加与否的作用
作用:函数采用从右到左的压栈方式,自己在退出时清空堆栈。添加时,减少了指令的使用。将问题描述:提示:这里描述项目中遇到的问题:例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据APP 中接收数据代码:@Override public void run() { bytes = mmInStream.read(buffer); mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget(); } 原因
2021-10-23 22:28:16
347
原创 c++ 静态成员与单例模式
1 静态成员变量class 类名{ static 数据类型 变量名;//声明};数据类型 类名::变量名 = 初值;//定义和初始化1)静态成员变量不属于对象2)不能再构造函数中被定义和初始化,需要在类的外部单独的定义及初始化3)可以通过类名直接访问,也可以通过对象访问4)静态成员变量存放在全局区5)静态成员使用受到访问控制属性的约束2 静态成员函数1)可以通过类名直接访问,也可以通过对象访问2)静态成员函数没有this指针,因此也没有const属性3)和普通成员函数一样受访..
2020-08-15 16:48:55
424
原创 线程的学习
线程的基础进程和程序进程是资源分配的基本单位线程是执行的基本单位进程和线程的关系一个进程中可以有多个线程,最少有一个线程(主线程)线程共享进程的资源,每个线程都有自己的属性。线程的id,线程自己的栈帧,自己的信号屏蔽字等。进程的切换和进程的通信,消耗资源非常大,效率低下。线程共享进程的资源,线程的切换和线程间的通信很灵活,消耗资源比较少,效率很好。线程的创建,退出,分离,汇合1.创建线程使用pthread_create(3)#include <pthrea.
2020-08-10 12:06:00
422
原创 IPC进程间通信 system V IPC
包含三个方面:1.消息队列 2.共享内存 3.信号量集使用命令ipcs 可以查看system v TPC的对象第一步:获取一个键值如何获取键值?使用ftok(3)获取一个键值#include <sys/types.h>#include <sys/ipc.h>key_t ftok(const char *pathname, int proj_id);功能:转换pathname和proj_id为一个key值。参数:pathname:指定文件...
2020-08-09 23:16:51
172
原创 信号
什么是信号?信号就是软中断什么是软中断?软中断就是软件模拟的中断什么是中断?中断服务程序。信号是进程的异步通信机制。系统提供的信号。如何查看?kill -l一般来说,信号有64个信号。kill -信号的编号 pid信号的产生、...
2020-08-02 17:41:44
177
原创 进程管道的通信
三 管道管道分为:有名管道,无名管道无名管道的创建使用pipe(2):#include <unistd.h>int pipe(int pipefd[2]);功能:创建管道参数:pipefd[2]:管道的两个文件描述符。pipefd[0]:读端pipefd[1]:写端返回值:0 成功-1 错误 errno被设置举例验证代码使用pipe.c1.父进程创建管道2. fork(2创建子进程3.父进程关闭写端,子进程关闭读端4....
2020-08-02 14:09:05
256
原创 使用C程序访问环境变量
一 ,使用C程序访问环境变量1.系统提供了一个全局变量。extern char **environ;使用全局变量environ将所有的环境变量输出。环境变量的存储2. int main(int argc,const char *argv[],char * envp[])举例验证,代码验证 myenv1.cint main(void)3.操作环境变量的函数getenv(3)#include <stdlib.h>char *getenv(const .
2020-08-02 08:08:44
773
原创 进程的学习
进程的基础程序和进程的区别程序是静态的,存放在磁盘上,是指令的集合。进程是程序运行的实例。一盒程序运行一次产生一个进程。每个进程都有自己的pid,每个进程都有自己的PCB。进程是资源分配的基本单位。在linux操作系统下,进程之间的关系是父子关系或兄弟关系。所有的用户进程形成了一棵树如何查看这棵树?pstree环境变量可以被继承 自定义不可以。使用系统调用fork (2)创建新进程查看进程的相关信息: ps -aux进程的退出1.retur
2020-07-30 15:06:49
203
原创 虚拟内存深入学习
使用mmap将物理内存映射到进程的虚拟地址空间需要使用mmap(2) 解决映射的问题#include <sys/mman.h>void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);功能:将内存或者文件映射到虚拟地址空间参数:addr 虚拟地址 (最好是有内核提供。NULL)length 映射的长度prot :PROT_EXEC ...
2020-07-29 11:39:55
107
原创 程序中的错误处理/进程映射
一、程序中的错误处理系统提供了全局变量,errno如何根据错误编号获取错误描述信息?perror(3)举例验证perror的使用补充:stdin 标准输入 键盘stdout 标准输出 显示器stderr 标准错误输出 显示器二、GDB调试器的使用三、进程映射...
2020-07-27 23:23:49
630
原创 环境变量,动态库静态库的学习
一、环境变量shell是用于用户和操作系统对话框的一个窗口。一款软件。用户使用shell和操作系统对话时候,需要存储一些信息,这些信息被存储到变量(shell认知的变量)中。变量分为两类,自定义变量,环境变量。自定义变量只能在自己中使用。而环境变量可以被子进程继承。自定义变量智能在自己中使用。而环境变量可以被子进程继承。如何查看环境变量?使用 env环境变量的格式环境变量的名字=环境变量的值USER=tarena在bash中如何查看环境变量的值echo $ 环境变
2020-07-26 22:28:25
261
原创 UC笔记
一,计算机的框架函数的封装函数A的实现代码中,调用函数B,那么就说函数A是对函数B的封装。application ,os , hardwareOS :操作系统的内核GNU项目组在 unix 创建了bash vi gcc....什么是操作系统?操作系统是管理计算机硬件资源的一款软件操作系统还是管理计算机软件资源的一款软件操作系统还是一款管理计算机资源的软件操作系统的内容管理内存管理文件文件系统进程管理进程间通信线程管理网络通信什么...
2020-07-26 10:09:17
205
原创 数据结构笔记
物理结构两种:顺序结构:内存里所有存储区连续排列数组和动态分配内存都是顺序结构的例子。顺序结构里可以给每个存储区指定编号,通过编号查找对应储存区(类似于数组)通过编号直接查找储存区的方法叫做随机访问能力。缺点:顺序结构里存储区个数很难改变,容易造成内存浪费 不适合进行插入删除的操作。链式结构:由多个相互独立的存储区构成,任何两个存储区之间可以使用指针连接链式物理结构里每个存储区都必须是一个结构体类型的存储区,他们叫做节点。单向线性结构两个节点通过一个指针连接。最后一个节点的.
2020-07-19 23:28:02
96
UndoRedo的简单实现
2022-08-04
client.zip
2020-11-28
BusyBox练习资料.rar
2020-03-23
css怎样解决网站加载不出来?
2019-08-13
100字节的数据,保存在文档中,为甚麽会产生1KB?
2019-05-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人