自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++ 线程池

线程池(Thread Pool)是一种预先创建并维护若干线程的并发编程模型,所有任务提交后由池内线程处理,避免频繁创建销毁线程带来的系统开销。资源复用:复用固定数量的线程处理大量短时任务控制并发:防止线程数无控制增长导致内存耗尽或CPU调度崩溃任务排队:合理调度和管理任务执行顺序。

2025-04-18 01:07:25 539

原创 C++ 链接过程中如何使用符号表

符号表是编译器和链接器用于记录和查找程序中各种符号信息的数据结构。一个符号可能表示变量、函数、全局数据、常量、段等内容。符号名类型(如函数、变量、段等)存储类别(本地、全局、弱符号等)符号的地址或偏移量所属段(如.text.data.bss定义或引用状态在使用 ELF 格式的系统(如 Linux)中,每个目标文件通常会包含一个.symtab段,保存该目标文件中所有符号的详细信息。程序编译后会生成一个或多个目标文件(Object Files)。这些目标文件可能包含对其他文件中符号的引用。

2025-04-18 01:04:46 301

原创 C++ 编译期与运行期详解

2、词法分析 : 将源代码分解成一个个独立的词法单元 (tokens),如关键字 (int, class)、标识符 (myVariable)、操作符 (+,=)、字面量 (123, "hello") 等。7、链接 :(严格来说,链接可以看作编译过程的最后一步或一个独立阶段) 将多个编译单元生成的对象文件 (.o 或 .obj) 以及所需的库文件链接在一起,解析外部引用,最终生成一个单一的可执行文件。9、输出: 程序的运行结果、对文件的修改、屏幕上的输出、网络发送的数据等。

2025-04-18 00:47:05 573

原创 void*通常怎么使用?

它是一种特殊的指针类型,可以指向任何数据类型的对象(或函数)的地址,但它本身不包含任何关于它所指向对象类型的信息。如果想创建可以存储任何类型数据的列表、树、哈希表等,或者编写可以处理任何类型数组的排序、搜索算法(如标准库的 qsort),void* 是常用的方法。这是 void* 的主要缺点。像 qsort 这样的函数接受一个 void* 指向数组基地址,并需要一个比较函数,该比较函数也接受两个 const void* 参数,你需要在比较函数内部将 void* 转换回实际的数据类型指针进行比较。

2025-04-18 00:44:31 590

原创 c++中cpu-绑核

在C++程序中进行CPU核心绑定(也称为CPU亲和性设置),指的是将程序的线程或进程绑定到特定的CPU核心上运行。这种做法可以带来一系列的好处,是实现提高cpu缓冲命中率,减少上下文切换开销重要解决方案。这是 Linux 系统上最常用的绑核方法。二、使用 taskset命令行工具(linux)在启动程序时通过taskset绑定核心。三、特别说明。

2025-04-18 00:40:20 282

原创 c++ 模板函数对性能优化

中,如果T是基本数据类型,编译器可能会完全展开这个函数,直接在调用处插入相应的机器指令,避免了函数调用的开销。当使用模板实现泛型算法时(例如标准库中的std::sort、std::find等),编译器可以根据具体的类型进行优化。由于模板通常被设计为内联函数(虽然这不是强制性的),这为编译器提供了更多的机会来执行内联优化,从而消除函数调用开销,并允许进一步的优化如常量折叠、死代码消除等。对于一个整数数组和浮点数数组,使用同一个排序算法模板,编译器会为每种类型生成专门的代码,可能利用该类型的特性进行优化。

2025-04-18 00:37:32 230

原创 C++中的CRTP

自定义类继承自模板类std::enable_shared_from_this,便可以在自定义类中使用模板类中的shared_from_this() 方法。注意需要自定义本身调用了shared_ptr的构造函数后,方可调用shared_from_this() 方法。回归CRTP,自定义类需要将自身作为模板参数传递给 std::enable_shared_from_this,在派生类中才可以使用 std::enable_shared_from_this 提供的 shared_from_this() 方法。

2025-04-18 00:32:16 400

原创 构造函数中调用虚函数的错误

这种设计虽然稍显“繁琐”,但可以清晰地把构造逻辑和初始化逻辑分离,避免在半初始化状态下调用子类代码。如果你在虚函数中调用外部接口、注册回调、访问依赖类状态,很可能由于对象未完全构造而。尤其是团队开发中,别人看到你调用了虚函数,很可能在子类中做了你意想不到的事情。时,虚函数分发机制根据当前的“构造阶段”判断调用哪个版本,而此时只认。表面上看,它只是调用了“错误的版本”,但在真实项目中,后果可能非常严重。,即便你“知道”自己调用的是某个子类的方法,也不要这么做。,对象通过内部的虚函数表指针来动态分发函数调用。

2025-04-18 00:28:46 403

原创 std::string转换成std::wstring

的大小因平台而异:在Windows上通常为2字节(UTF-16编码),在Linux上多为4字节(UTF-32编码)。转换过程涉及UTF-8的变长编码规则:1字节表示ASCII字符,2-4字节表示其他Unicode字符。是一个转换facet,负责将UTF-8的多字节序列解码为宽字符。它支持UTF-8到宽字符的转换,代码简洁且安全。使用标准化的UTF-8解码算法,跨平台一致性好,性能稳定。采用的编码,2字节表示大部分字符,4字节表示增补平面字符。可变长编码,1字节表示ASCII,中文字符通常为3字节。

2025-04-18 00:23:57 954

原创 磁盘I/O性能分析

await 值的大小一般取决与 svctm 的值和 I/O 队列长度以 及I/O 请求模式,如果svctm的值与await很接近,表示几乎没有I/O等待,磁盘性能很好,如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢,此时可以通过更换更快的硬盘或者升级CPU来解决问题。如果 %util 接近 100% ,表示磁盘产生的 I/O 请求太多,I/O 系统已经满负荷的在工作,该磁盘可能存在瓶颈。名称显示,“1”代表每隔1s采取一次数值,“2”代表总共采取2次数值。

2025-04-16 22:54:40 672

原创 磁盘 I/O原理刨析

计算机的运行,就像一场有条不紊的交响乐演奏,CPU、内存、磁盘等硬件各司其职,共同奏响和谐的旋律。在这场演奏中,磁盘 I/O 虽然不像 CPU 那样被众人熟知,却承担着至关重要的角色。它就像一座桥梁,连接着计算机的内部世界与外部存储,负责数据的输入与输出。从打开一份文档,到加载一款大型游戏,再到服务器处理海量数据,每一个操作都离不开磁盘 I/O 的默默支持。然而,你是否想过,为什么有时候打开一个文件会瞬间完成,而有时候却要等待许久?为什么同样是存储设备,固态硬盘和机械硬盘的读写速度会有天壤之别?

2025-03-08 13:44:38 819

原创 x86汇编语言

CX 字符串和循环计数器。AX 累加器结果数据。BX 数据段数据指针。

2025-02-11 23:43:04 86

原创 音频的各项指标

音频的各项指标

2023-05-21 22:47:39 1733

原创 FFmpeg学习:FFmpeg4数据结构分析

AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。在这个结构体中,除了一些回调函数接口之外,有一个变量const char *name,该变量存储了协议的名称。下列代码显示了获取元数据并存入meta字符串变量的过程,注意每一条key和value之间有一个"\t:",value之后有一个"\r\n"注意,这个结构体并不在FFMPEG提供的头文件中,而是在FFMPEG的源代码中。URLContext:每种协议,有一个协议操作对象和一个关联的协议对象。

2023-05-21 16:43:05 936

原创 C++实现二进制码流和字符串码流互转

废话不多说上代码#include <iostream>#include <vector>#include <string>void SecToStr(const std::string strSrc, std::string& strDst){ for (size_t j = 0; j < strSrc.size(); j = j+8) { std::string strTmp = strSrc.substr(

2021-04-21 00:21:41 1030

原创 实现set

package setimport ( "bytes" "fmt")func main() {}type HashSet struct { m map[interface{}]bool}func NewHashSet() *HashSet { return &HashSet{m: make(map[interface{}]bool)}}//添加 true 添加成功 false 添加失败func (set *HashSet) Add(e interfac.

2021-04-20 00:49:34 216

原创 context包的用途

context包的用途Context通常被译作上下文,它是一个比较抽象的概念,其本质,是【上下上下】存在上下层的传递,上会把内容传递给下。在Go语言中,程序单元也就指的是Goroutine

2021-04-20 00:47:24 342

原创 make和new区别

new1.new的作用是初始化一个指向类型的指针(*T)2.new函数式内建函数,函数定义:func new(Type) *Type3.使用new函数来分配空间,传递给new函数的时一个类型,不是一个值。返回值,指向这个新分配的零值的指针make的作用是为slice,map或chan初始化并返回引用(T)make函数式内建函数,函数定义:func make(Type, size IntegerType) Type第一个参数是一个类型,第二个参数是长度,返回值是一个类型make(T,args

2021-04-20 00:46:19 429

原创 select可以用于什么,常用语gorotine的完美退出

golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作

2021-04-20 00:44:46 329

原创 go struct能不能比较

因为是强类型语言,所以不同类型的结构不能作比较,但是同一类型的实例值是可以比较的,实例不可以比较,因为是指针类型

2021-04-20 00:43:24 311

原创 说说进程,线程,协程之间的区别

进程是资源的分配的调度的一个独立单元,而线程是cpu调度的基本单元同一个进程可以包括多个线程;进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束;线程共享整个进程的资源(寄存器,堆栈,上下文),一个进程至少包括一个线程;进程的创建调用fork,而线程的创建调用pthread_create;线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源进程是资源的分配单位线程是操作系统调度的单位进程切换需要的资源很大,效率很低线程切换需要的资源一般,效率

2021-04-20 00:42:18 327 1

原创 go语言中的引用类型包含哪些

数组切片,字典,通道,接口

2021-04-17 01:23:08 613

原创 在go语言中,Printf(),Sprintf(),Fprintf()函数的区别用法是什么?

都是把格式好的字符串输出,只是输出的目标不一样;Printf(),是把格式字符串输出到标准输出(一般是屏幕,可以重定向)是和标准输出文件(stdout)关联的,Fprintf则没有这个限制Sprintf() 是把格式字符串输出到指定字符串中,所以参数比printf多一个char*,那就是目标字符串地址Fprintf() 是把格式字符串输出到指定文件设备中,所以参数比printf多一个文件指针FILE*主要用于文件操作,Fprintf()是格式化输出到一个stream,通常是到文件...

2021-04-17 01:22:22 1363

原创 切片和数组对比

数组数组是具有固定长度且拥有零个或者多个相同数据类型元素的序列数组的长度是数组类型的一部分,所以[3]int和[4]int是两不同的数组类型数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变;数组是值传递;数组是内置(build-in)类型,是一组同类数据的集合,他是值类型,通过从0开始的下标索引访问元素值数组的长度也是其1类型的一部分,通过内置函数len(array)获取其长度在初始化后长度是固定的,无法修改其长度,当做为方法的参数传入将复制一份数组而不是引用同一指针.

2021-04-17 01:14:02 167

原创 QLineEdit信号

editingFinished 按下回车, 焦点移开returnPressed格式有效textChanged setText()也激发textEdited#include "qtguiapplication7.h"QtGuiApplication7::QtGuiApplication7(QWidget *parent) : QWidget(parent){ ui.setupUi(this); ui.lineEdit->setPlaceholderText(QString:

2021-04-17 01:05:39 573

原创 QRegExpValidator

QRegExp rx("[a-zA-Z0-9-_]+@[a-zA-Z0-9_]+\\.[a-zA-Z0-9-_]+");//邮箱QRegExpValidator *pReg = new QRegExpValidator(rx, this);ui.email->setVlidator(pReg);#include "qtguiapplication7.h"QtGuiApplication7::QtGuiApplication7(QWidget *parent) : QWidget(p

2021-04-17 01:00:37 1626

原创 计算器核心算法解析下

遍历后缀表达式中的数字和运算符当前元素为数字:进栈当前元素为运算符:1.从栈中弹出右操作数2.从栈中染出左操作数3.根据符号进行运算4.将运算结果压入栈中遍历结束栈中的唯一数字为于是暖结果while(!exo,isEmpty()){ if(当前元素为数字) 入栈; else if(当前元素为运算符) { 1.操你个栈中弹出右操作数; 2.从栈中染出左操作数; 3.根据符号进行运算; 4.将原酸结果压入栈中 } else

2021-04-17 00:57:24 157

原创 计算器核心解析算法中

中缀转后缀转换过程:当前元素e为数字:输出当前元素e为运算符1.与栈顶运算符进行优先级比较2.小于等于:将栈顶元素输出,转13.大于:将当前元素e入栈当前元素e为左括号:入栈当前元素e为右括号:1.弹出栈顶元素并输出,直至栈顶元素为左括号2.将栈顶的左括号从栈中弹出while(!exp.isEmpty()){ QString e = exp.dequeue();//排在第一位的哪个元素取出来 if(isNumber(e))//是数字 { 输出e;

2021-04-17 00:54:58 140

原创 计算器核心解析算法上

计算机如何读懂四则运算表达式?9.3+(3-0.11)中缀表达式,后缀表达式5+3----5 3 +1+2*3->1 2 3 * +9 + (3 - 1 )*5 ->9 3 1 - 5 * +中缀表达式符合人类的阅读和思维习惯后缀表达式符合计算机的运算方式解决方案1.将中缀表达式进行数字和运算符的分离将中缀表达式转换为后缀表达式t哦那个过后缀表达式计算最终结果数字和小数点【0-9或.】符号位【—+】运算符【——,-,*,/】括号【或】.

2021-04-17 00:52:01 192

原创 Qt中的字符串类

Qt中的字符串类采用unicode编码使用隐式共享技术来节省内存和不必要的数据拷贝跨平台使用,不必考虑字符串的平台兼容性QString 直接支持字符串和数字的相互转换QString 直接支持字符串的大小比较QString 直接支持不同字符编码间的相互转换QString 直接支持std::string 和std::wstring 的相互转换QString 直接支持正在表达式的应用#include <QCoreApplication>#include &.

2021-04-17 00:49:58 199

原创 形态学操作

l开操作- openl闭操作- closel形态学梯度- Morphological Gradientl顶帽 – top hatl黑帽 – black hat开操作- open先腐蚀后膨胀 可以去掉小的对象,假设对象是前景色,背景是黑色morphologyEx(src, dest, CV_MOP_BLACKHAT, kernel);- Mat src – 输入图像- Mat dest – 输出结果- int OPT – CV_MOP_OPEN/ CV_MOP_CLOS...

2021-04-17 00:45:56 147

原创 C++封装sqlite3库

#ifndef _SMART_DB_H#define _SMART_DB_H#include "sqlite3.h"#include <string>#include <iostream>#include <vector>/** function:封装的sqlite类,具备链接,查询,关闭功能* des:sql用字符串拼接方式,会有sql注入的风险*/class SmartDB{public: SmartDB(); /*.

2021-04-15 21:51:38 1293

原创 车ECU库

<?xml version="1.0" encoding="gb2312"?><AUTO> <INIT TOTAL="08"> <SYSTEM NO="00" NAME="VAR_000009"> <INIT_IO TOTAL="09" CMD="10" PROCEDURE="Diag_InitIo"> <STATE BYTES="02" NAME="BautRate" ID="01"&g.

2021-04-12 01:13:57 100

原创 关于std::function,几个行之有效的扩展小技巧

开发中,若你的项目稍微具有点扩展性和灵活性,那便少不了会用到std::function。std::function可以容纳任何形式的可调用体,比如普通函数,成员函数,Lambda 函数。因此,可以借其来实现两个重要的功能:接口分离和时间分离。接口分离指的是调用者和被调用者之间彼此分离,以降低二者的依存性。具体来说,你可以将任何可调用体保存到std::function中,可调用体不知道std::function的存在,反之亦如此。于是,可以做什么呢?将具体的处理方式等到用的时候再进行指定,调用者通

2021-04-12 00:32:27 711

原创 QT中文乱码问题

默认字符集设置文件字符集格式vs qtcreator设置字符集转换QStringLiteralcodec = QTextCodec:codecForName("UTF-8")QTextCodec::setCodecForLocale(codec)QTextCodec::availableCodecs();QString::fromLocal8Bit#include "qtguiapplication2.h"#include <QtWidgets/QApplicatio

2021-04-12 00:18:10 183

原创 膨胀与腐蚀

形态学操作(morphology operators)-膨胀图像形态学操作 – 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学 形态学有四个基本操作:腐蚀、膨胀、开、闭 膨胀与腐蚀是图像处理中最常用的形态学操作手段形态学操作-膨胀跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状lgetStructuringElement(int shape, Size

2021-04-12 00:11:55 119

原创 模糊图像

模糊原理Smooth/Blur 是图像处理中最简单和常用的操作之一 使用该操作的原因之一就为了给图像预处理时候减低噪声 使用Smooth/Blur操作其背后是数学的卷积计算通常这些卷积算子计算都是线性操作,所以又叫线性滤波假设有6x6的图像像素点矩阵。卷积过程:6x6上面是个3x3的窗口,从左向右,从上向下移动,黄色的每个像个像素点值之和取平均值赋给中心红色像素作为它卷积处理之后新的像素值。每次移动一个像素格。归一l高斯模糊- GaussianBlur(Mat ...

2021-04-12 00:10:14 166

原创 调整图像亮度与对比度

图像变换可以看作如下: 像素变换 – 点操作 邻域操作 – 区域 调整图像亮度和对比度属于像素变换-点操作 Mat new_image = Mat::zeros( image.size(), image.type() ); 创建一张跟原图像大小和类型一致的空白图像、像素值初始化为0saturate_cast<uchar>(value)确保值大小范围为0~255之间Mat.at<Vec3b>(y,x)[index]=value 给每个像素点每个通道赋值

2021-04-12 00:05:25 96

原创 TreeWiget右键添加删除复制粘贴剪切和双击展开

项目中代码#include "treewidget.h"#include "dataprocess.h"#include "addsondialog.h"#include "dialog.h"#include "setconfdialog.h"#include <QHeaderView>#include <QVector>#include <vector>#include <algorithm>#include <iostream

2021-04-10 08:09:53 900

原创 Qt表格实现模糊查询搜索过滤

项目中的源码,仅供参考#include "dtclibwidget.h"#include "dtclib.h"#include "dataprocess.h"#include <QToolTip>DtcLibWidget::DtcLibWidget(QWidget *parent) : QWidget(parent),standModel(new QStandardItemModel), filterModel(new MySortFilterProxyModel), t

2021-04-08 07:51:57 3281

windows下fdk-aac-64.lib

在out中build里面

2021-12-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除