- 博客(258)
- 资源 (20)
- 收藏
- 关注
原创 vector详解(C++)
/ 定义一个存储整数的空vector// 定义一个包含10个元素的vector,元素值默认初始化为0// 定义一个包含10个元素的vector,元素值为1// 定义一个新vector,并通过拷贝构造函数初始化。
2025-01-21 18:25:54
810
原创 C++ ranges
任何可以迭代的对象都可以使用 ranges。头文件:#include。std::views是std::ranges::views的别名。逆序遍历:for(int i:v|reverse)C++20新增 ranges 新特性。正序遍历:for(int i:v)
2025-01-16 16:21:09
262
原创 DLL和CRT
也就是说,每个使用CRT静态链接的dll中都有一个自己的全局堆句柄,他们自己都在这个句柄上使用内存。也就是说在编译的最后一步(链接阶段),如果程序需要使用静态库,在这一步都会一起打包到可执行文件中。所需文件:接口.h头文件,dll文件,lib文件。:每个dll都是去调用CRT库的dll函数来分配和释放内存的,使用的是同一个句柄,所以没问题。CRT运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。若作为其他库的依赖库,将会造成多余的副本,因为必须与目标文件打包。
2024-05-30 10:49:24
598
原创 C++深拷贝和浅拷贝
*特点:**如果原始对象和拷贝对象共享同一块内存,当其中一个对象修改了这块内存中的数据时,另一个对象中的数据也会被修改,因为它们指向同一块内存区域。这可能导致意外的数据修改或释放问题。浅拷贝带来的问题是堆区的内存重复释放,当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,从而导致指针使用异常而程序崩溃。深拷贝是指在拷贝对象时,会创建一个新的对象,并将原始对象的所有内容都复制到新对象中,包括指针所指向的内容。
2024-05-30 10:15:10
286
原创 std::move和左值右值
首先,函数参数T&&是一个指向模板类型参数的右值引用,通过引用折叠,此参数可以与任何类型的实参匹配(可以传递左值或右值,这是std::move主要使用的两种场景)。在 C++ 中,左值是可以被取地址的表达式,而右值是临时的、不可取地址的表达式。通常,左值是具有名称、有持久性的,而右值是临时性的、瞬时的。std::move 是 C++ 标准库中的一个函数模板,用于将一个左值(左值引用)转化为右值引用,从而实现移动语义。一个对象被用作右值时,使用的是它的内容(值),被当作左值时,使用的是它的地址。
2024-05-29 11:07:19
655
原创 UI线程和工作线程
操作系统在开启一个新的进程时,并没有为其创建消息队列,而是当进程第一次调用GDI函数后,并且进程持有窗口时,才持有消息队列。在Windows下,只有那些具备窗口(GUI用户接口界面)的进程,才会有消息队列,那些不具备GUI的进程是没有消息队列的。只处理逻辑的线程,例如:启动一个线程,用来做一个复杂的计算,计算完成之后,此线程就自动退出,这种线程称为工作线程。Windows应用程序一般由窗口和控件组成,这也是应用程序与人交互的媒介,拥有窗口(控件)的线程称为UI线程。一个进程只有一个UI线程(即主线程)
2024-05-29 10:35:49
544
1
原创 windows消息循环
引用: windows程序员面试指南windows为每个UI线程准备了一个消息队列,window会将线程的消息放入对应线程的消息队列中,线程负责从队列中取出消息,并作处理。一般而言,线程在第一次创建GDI对象时,系统会为线程创建消息队列。非UI线程是没有消息队列的。PS:并不是有消息队列的线程就一定是UI线程,非UI线程也可以有消息队列有了消息队列以后,线程需要不断的去队列中取消息,并分发给各个GDI对象;因此,需要一个while循环,该循环称之为消息循环。在消息循环中,可以对消息做一些简单的过滤和处理
2024-05-29 10:21:51
368
原创 windows句柄
句柄是Windows系统中对象或实例的标识,这些对象包括模块、应用程序实例、窗口、控件、位图、GDI对象、资源、文件等。:indows使用句柄来标识诸如窗口、位图、画笔等对象,并通过句柄找到这些对象。:是Windows中各个对象的一个唯一的、固定不变的ID;:是一个32位无符号整型值(32位系统下);:相当于指针的指针;
2024-05-29 10:05:17
300
原创 创建线程的方法(windows)
windows上常用的创建线程的方法:CreateThread(),_beginthread(),std::thread。
2024-05-16 11:04:35
1233
原创 构造函数不能做为虚函数
虚函数对应一个虚函数表,这大家都知道,可是这个虚函数表其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过虚函数表来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。虚函数的作用在于通过父类的指针或者引用来调用它的时候能够变成调用子类的那个成员函数。而构造函数是在创建对象时自动调用的,不可能通过父类的指针或者引用去调用,因此也就规定构造函数不能是虚函数。
2023-09-20 10:39:13
459
1
原创 C++11 Lambda表达式
*捕获列表:**用来说明外部变量的访问方式,外部变量访问方式说明符可以是 = 或 & ,表示函数体中用到的、定义在外面的变量在函数体中是否允许被改变。[=, &a] 表示按值传递的方法捕获父作用域的所有变量,但按引用传递的方法捕获变量a。[&, a] 表示按引用传递的方法捕获父作用域的所有变量,但按值传递的方法捕获变量a。函数对象定义在调用的地方,直接看到上下文,可读性更强,方便修改;[&] 表示按引用传递的方法捕获父作用域的所有变量。[=] 表示按值传递的方法捕获父作用域的所有变量。
2023-05-15 18:21:40
581
原创 C++ 智能指针和使用陷阱
weak_ptr 设计的目的是为配合 shared_ptr 而引入的一种智能指针,来协助 shared_ptr 工作, 它只可以从一个 shared_ptr 或另一个 weak_ptr 对象构造, 它的构造和析构不会引起引用记数的增加或减少。如果我们主动释放掉get 函数获得的指针,那么智能 指针内部的指针就变成野指针了,析构时造成重复释放,带来严重后果!譬如:Boy类中有Girl的智能指针;智能指针的赋值拷贝,首先拷贝指向对象的指针,再使引用次数加减操作,虽然引用次数加减是原子操作,
2023-05-10 17:29:35
1122
原创 [gflags]开启页堆处理堆破坏问题
当我们从普通堆管理器分配一块内存时,内存总是8字节对齐的,页堆默认情况下也会使用这个对齐规则,但是这会导致分配的内存块的结尾不能跟页边界精确对齐,可能存在0-7个字节的间隙,显然,对位于间隙范围内的访问是不会被立即发现。因为每次分配的内存都要以这种形式布局,尤其对于小片的内存分配,即使分配一个字节,也要分配一个内存页,和一个保留的虚拟内存页(注意在目前的实现中,这个用作边界保护区域的页从来不会被提交)。正常页堆原理与CRT调试内存分配函数类似,通过分配少量的填充信息,在释放内存块时检查填充区域。
2022-09-27 18:22:43
836
原创 程序崩溃后windbg自动启动
1.在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options下,新建子项。2.在新的子项 Infloflow.exe 下,新建字符串,命名 debugger,数据填写 windbg.exe 的路径。譬如调试的进程是 infoflow.exe,就取名 infoflow.exe。3.使用管理员权限打开命令行,执行 windbg -I (大写I)
2022-09-26 10:11:38
1339
原创 【Visual Studio】调试过程中VS卡死无响应
最近在使用vs2022 debug调试过程中,经常出现vs2022直接卡死无响应,最后发现问题的原因是加载符号导致。解决方案:调试 - 选项 - 符号1.取消勾选 xxx 符号服务器2.选择 仅加载指定的模块
2022-07-12 15:24:54
18263
19
原创 windows获取系统DPI
dc.GetDeviceCaps(LOGPIXELSX); //每英寸水平逻辑像素数dc.GetDeviceCaps(LOGPIXELSY); //每英寸垂直逻辑像素数dc.GetDeviceCaps(HORZRES); //水平像素总数dc.GetDeviceCaps(VERTRES); //垂直像素总数dc.GetDeviceCaps(DESKTOPHORZRES); //可视桌面的水平像素总数dc.GetDeviceCaps(DESKTOPVERTRES); //可视桌面的水平像素总数dc
2022-02-17 18:08:34
3759
原创 【SDK8.1】VS2019/VS2022 安装SDK8.1
VS2019 开始,默认不包含SDK8.1,因此如果需要SDK8.1则需要单独安装。SDK8.1 官网下载地址:https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/
2021-12-31 15:19:22
8105
原创 UML类图
标题uml类图分为两部分,一部分是表示类,一部分表示类与类之间的关系。uml是怎么表示类的?在面向对象中,常用的类有以下几种类:普通类抽象类接口1)普通类的表示咱们先来定义一个女人类,公有属性为:名字,年龄私有属性为:身份证号码,家庭地址,公有方法为:吃饭,睡觉,私有方法为:生孩子,做家务。那么在uml类图上怎么展示呢?...
2021-12-27 15:46:56
314
原创 [VS] 线程解冻和冻结
工具:vs2019系统:win10语言:C++本文主要通过 VS 自带的诊断工具,对线程进行冻结和解冻调试。昨天遇到一个问题,客户端会发出 gss0.bdstatic.com 的请求,但是代码里并没有搜到。所以需要定位是dll哪个模块发出。程序启动后,打开线程界面:对其中的线程进行单独冻结:最后定位到,是其中一个 xxx.dll ,发送的请求。...
2021-09-01 14:21:10
747
原创 Sublime Ctrl + Shift + F 快捷键不生效
解决方法:检查输入法是否占用了 ctrl+shift+f 的快捷键。搜狗、百度输入法都会占用该快捷键,用于简体和繁体的切换。
2021-03-25 11:09:01
775
原创 [VS] 诊断工具,检测内存泄漏,进行内存调优
工具:vs2019系统:win10语言:C++github 调试 demo:dangwei-90/ProcessOptimize (github.com)本文主要通过 VS 自带的诊断工具,对程序进行memory 内存调优。
2021-01-19 11:26:12
7815
4
原创 [VS] 诊断工具,CPU调优
工具:vs2019系统:win10语言:C++github 调试 demo:dangwei-90/ProcessOptimize (github.com)本文主要通过 VS 自带的诊断工具,对程序进行CPU调优。Begin1. 编译测试 demo 读者可以通过dangwei-90/ProcessOptimize (github.com)下载,也可以自己编写测试 demo. 通过一个 while 循环来占用 CPU 资源。void CProcessOptimizeDlg...
2021-01-19 11:15:39
1671
原创 [C/C++] undefined reference to ‘std::cout‘
gcc TrackersManger.cpp -o TrackersManger编译时出现如下错误:原因是:编译 cpp 文件时,需要使用 g++ 编译,改为如下即可:g++TrackersManger.cpp -o TrackersManger
2021-01-13 11:15:40
1035
原创 [C++]生产消费模型
生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。github源码路径:https://github.com/dangwei-90/Design-Mode// 此文件包含 "main" 函数。程序执行将在此处开始
2021-01-05 11:58:19
365
原创 [libtorrent] linux 搭建 libtorrent 开发编译环境
操作系统:ubuntu 20.04(参考文档:http://libtorrent.org/building.html)搭建 libtorrent 步骤:一. 下载源码 1. 从官网下载 libtorrent 源码 git clone --recurse-submodules https://github.com/arvidn/libtorrent.git 2. 安装 gcc sudo apt install gcc g++ automake ...
2020-12-29 15:55:13
960
原创 [xbttracker] linux 下 xbt tracker环境搭建(ubuntu)
系统环境:Ubuntu x64 20.04操作系统:win10xbt源码:https://github.com/dangwei-90/xbt参考文档:http://xbtt.sourceforge.net/tracker/ (官网)(注:官网 xbt 源码已经无法下载)XBT Tracker 环境搭建一. 安装依赖库 1. 安装 boost sudo apt-get install libboost-dev 2. 安装 mysql (*sql 版...
2020-12-28 14:34:42
623
DotNetFramework_3.5.zip
2020-04-27
StopSysSleep.zip
2020-04-26
104个常用注册表文件
2013-09-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人