自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

@杭大大

学习分享和记录

  • 博客(107)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 malloc 内存分配机制:brk 与 mmap

特性brksbrk(用于 < 128KB)mmap(用于 >= 128KB)分配区域堆 (Heap)内存映射区域 (Memory Mapped Region)释放行为缓存到内存池,不立即归还OSmunmap立即归还OS主要优点高效(缓存复用,减少系统调用/缺页)避免大块外部碎片,释放彻底主要缺点易产生内存碎片,堆可能“膨胀”开销大(系统调用、缺页中断)适用场景高频、小块内存分配低频、大块内存分配。

2025-06-03 22:37:05 730

原创 Qt 实现的简单截屏程序

Qt实现的简单截屏程序,拖动鼠标进行截图,按下enter键将截图保存到剪切板。

2025-04-25 16:46:54 186

原创 linux下移动鼠标位置

部分linux系统会自动熄屏,通过程序模拟鼠标移动防止熄屏。

2025-04-24 19:53:00 139

原创 C++ | 可变模板参数

可变模板参数为C++泛型编程打开了全新的大门,结合折叠表达式和完美转发,可以优雅地处理任意数量和类型的参数。它是现代C++库开发的基石,熟练掌握这一特性,你将能写出更灵活、更强大的通用代码!折叠表达式(Fold Expression)允许用简洁的语法对参数包进行展开操作,支持所有二元运算符。在C++11之前,若想实现一个接受任意数量参数的函数,只能依赖。:接受任意类型和数量的参数,生成日志字符串。:混合固定参数和可变参数时,注意参数顺序。:无需递归,代码简洁,编译效率更高!:处理不同数量和类型的回调参数。

2025-04-16 14:19:23 453

原创 C++| 深入剖析std::list底层实现:链表结构与内存管理机制

通过双向链表实现了极致的插入删除性能,但其非连续内存的特性也带来了访问效率的妥协。理解其底层机制有助于在内存敏感或高频修改的场景中发挥其优势,同时规避潜在的性能陷阱。本文将深入探讨其节点结构、内存分配策略及迭代器实现原理,揭示链表的性能优势和潜在代价。每次插入元素时,从内存池(通过分配器)申请一个节点内存。频繁增删节点可能导致内存碎片,降低内存访问效率。删除元素时,立即释放节点内存,无内存预留机制。:迭代器永不失效(新节点不影响现有节点指针)。:仅被删除元素的迭代器失效,其他迭代器仍有效。

2025-04-15 15:57:20 490

原创 C++ | STL之list详解:双向链表的灵活操作与高效实践

是C++ STL中基于双向链表实现的顺序容器,擅长高效插入和删除操作,尤其适用于频繁修改中间元素的场景。的内存非连续,但提供了稳定的迭代器和灵活的元素管理。:每个元素需额外存储前后指针(64位系统通常为16字节额外开销)。容器,每个元素(节点)包含指向前后节点的指针。不适合:需要随机访问或对缓存命中率要求高的场景。:访问元素需遍历链表,时间复杂度O(n)。:任意位置O(1)时间复杂度,但需注意。:除非删除元素,否则迭代器不会失效。:动态分配节点内存,无需预分配。:无需移动其他元素。

2025-04-15 15:50:28 406

原创 C++ | 深入剖析std::vector底层实现:动态数组的机制与性能优化

std::vector是C++开发者最熟悉且高频使用的容器,但其底层实现往往被当作“黑箱”。理解vector的内部机制不仅能避免常见陷阱(如迭代器失效),还能写出更高效的内存管理代码。本文将深入探讨vector的底层数据结构、内存分配策略及关键实现细节。

2025-04-15 15:38:16 851

原创 C++ | STL之vector详解:动态数组的高效用法与技巧

它结合了数组的高效随机访问和动态内存管理的灵活性,是替代传统静态数组的首选。是一个封装动态数组的顺序容器,能够根据需要自动调整内存大小。时,vector会重新分配内存(通常扩容至2倍),原有迭代器失效。的时间复杂度为O(1),而中间插入/删除为O(n)。方法仅清空元素,不释放内存。不适合:频繁在头部或中间插入/删除(可考虑。:无需手动管理内存,插入元素时自动扩容。)快速访问元素,时间复杂度为O(1)。元素数量动态变化,且主要在尾部增删。:提供与C风格数组的无缝交互(通过。:频繁插入数据时,优先使用。

2025-04-15 15:29:57 289

原创 C++ | 多态

多态(Polymorphism)是面向对象编程的三大核心特性之一(封装、继承、多态),源自希腊语"poly"(多)和"morph"(形态)。它允许不同对象对同一消息做出不同响应,极大提高了代码的灵活性和可扩展性。

2025-04-11 15:01:04 649

原创 C++ | 时间日期

有四个与时间相关的类型:clock_t、time_t、size_t 和 tm。类型 clock_t、size_t 和 time_t 能够把系统时间和日期表示为某种整数。

2025-04-11 14:27:59 522

原创 Git 高级操作

不仅是代码管理的基石工具,更是开发者提升效率的瑞士军刀。掌握基础操作只是起点,真正的高手都在使用进阶技巧优化工作流。本文将深入解析Git四大高阶操作,助你轻松应对复杂开发场景!Git Stash/Git Rebase/Git Cherry-Pick

2025-04-11 14:15:29 853

原创 Git 标签

是项目开发中的里程碑标记工具,能精准锁定关键版本代码,堪称开发者的"版本时光机"。无论是正式发布、代码回滚还是关键节点存档,标签管理都是团队协作中不可或缺的技能。本文将深入解析Git标签的完整使用链,助你掌握版本控制的精髓!

2025-04-11 14:02:51 436

原创 Git 查看提交历史

无论是回溯代码变更、定位问题根源,还是进行版本回退,掌握Git提交历史的操作技巧都至关重要。本文将全面解析Git提交历史相关命令

2025-04-11 11:41:31 1911

原创 Harmony C++侧通过runJavaScript调用js函数失败

可以在ArkWeb_ComponentAPI的onPageEnd设置的回调之后再调用。或者借助WebViewClient的onPageFinished方法来判断页面是否加载完毕。只有在页面加载完成的情况下,网页中的 DOM 结构与 JavaScript 代码才能够正常使用。所以通过runJavaScript执行js代码必须得在页面加载完成之后。

2025-04-11 09:46:33 152

原创 Qt音频采集:QAudioInput详解与示例

是Qt Multimedia模块中用于音频采集的核心类,能够从麦克风等输入设备实时获取原始音频数据(PCM格式)。本文将通过原理讲解和代码示例,帮助开发者快速掌握音频采集的核心技术。要点说明格式匹配必须与硬件支持格式一致实时性处理避免在回调中进行耗时操作资源释放stop()后及时释放设备跨平台差异特别注意移动端权限问题。

2025-04-06 08:30:00 1442 1

原创 Qt音频输出:QAudioOutput详解与示例

QAudioOutput是Qt多媒体框架中的一个关键类,它提供了将PCM(脉冲编码调制)原始音频数据发送到音频输出设备的接口。作为Qt多媒体组件的一部分,QAudioOutput允许开发者在应用程序中实现音频播放功能,支持多种音频格式和设备配置。QAudioOutput的主要作用是将音频数据流传输到系统音频输出设备,如扬声器或耳机。它与QAudioInput类相对应,后者用于从音频输入设备(如麦克风)捕获音频数据。这两个类共同构成了Qt音频处理的基础,为实现完整的音频录制、处理和播放流程提供了必要的工具。

2025-04-06 08:15:00 1194

原创 Git分支管理

git checkout -b feature-tmp # 创建并切换到feature-tmp分支。git log --oneline --graph --all # 图形化显示分支演进。git switch -c feature-tmp # 更直观的创建切换命令。git merge feature-new --no-ff # 保留合并记录。git branch -d feature-new # 删除已合并分支。git commit -m "草率提交" # 会导致残留冲突代码。

2025-04-06 08:00:00 817

原创 Git三剑客:工作区、暂存区、版本库深度解析

工作区:代码的“草稿纸”,自由修改但需及时保存(git add暂存区:提交前的“缓冲区”,灵活控制提交内容。版本库:代码的“保险箱”,记录每一次历史变更。

2025-04-05 23:42:29 1279

原创 Qt多线程从基础到性能优化

使用QMetaObject::invokeMethod跨线程更新UI。线程局部存储(QThreadStorage)原子操作使用QAtomicInteger。使用QMutex::tryLock()使用QObject的父子关系自动回收。理想数量 = CPU核心数 ± 2。默认最大线程数 = CPU核心数。复杂任务的解耦与响应式界面保持。QElapsedTimer计时。:简单线程任务,需要快速实现。注意跨线程delete的隐患。CPU多核架构的有效利用。I/O密集型可适当增加。使用生产者-消费者模式。

2025-04-05 23:32:18 436

原创 C++ | 信号处理

信号是由操作系统传给进程的中断,会提早终止一个程序。在 UNIX、LINUX、Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C 产生中断。有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C头文件 <csignal> 中。信号值宏定义触发场景1SIGHUP终端连接断开2SIGINT键盘中断(Ctrl+C)6SIGABRT调用abort()触发8SIGFPE算术运算错误11SIGSEGV。

2025-04-04 08:00:00 330

原创 C++ | 多线程

使用细粒度锁或读写锁(std::shared_mutex):优先使用线程本地存储(thread_local)(Mutex):保证资源独占访问的同步机制。:多个线程同时访问共享资源导致未定义行为。:分离线程(后台运行,无法再join):避免false sharing(使用。:分离关注点(如网络通信与数据处理):避免主线程阻塞(如UI界面):同时执行I/O操作与计算任务。:多个线程相互等待导致永久阻塞。:程序启动时默认创建的线程。(C++20):线程同步点。:检查线程是否可join。:如原子操作或并发容器。

2025-04-04 08:00:00 780

原创 C++ | 类模板

template <typename T> // 每个成员函数都需要模板声明// 实现代码。

2025-04-03 15:54:04 375

原创 C++ | 函数模板

A:使用static_assert添加约束,或使用concepts(C++20)编写数学计算函数(支持int、float、double等)明确类型要求,必要时使用static_assert。A:是的,但现代编译器会进行优化,合理设计可控制体积。A:不能,虚函数需要运行时多态,而模板是编译期机制。在C++开发中,我们经常遇到需要编写。需要为每个类型重复编写几乎相同的代码。A:当两者都匹配时,优先选择普通函数。创建泛型容器操作(如排序、查找)优先考虑重载,特殊需求才用特化。将复杂逻辑拆分为非模板函数。

2025-04-03 15:46:46 544

原创 C++ | 文件读写(ofstream/ifstream/fstream)

本文介绍如何从文件读取流和向文件写入流。这就需要用到 C++ 中另一个标准库 fstream,它定义了三个新的数据类型:ofstream、ifstream、fstream

2025-04-03 15:36:24 1036

原创 Qt实现HTTP GET/POST/PUT/DELETE请求

QNetworkAccessManager支持GET、POST、PUT、DELETE等HTTP方法。本文将手把手教你如何用Qt实现这些请求,并附完整代码示例。在现代应用程序开发中,HTTP请求是与服务器交互的核心方式。Qt作为跨平台的C++框架,提供了强大的网络模块。

2025-03-31 19:43:58 1248

原创 Windows防截屏

SetWindowDispl是Windows提供的一个关键API(Windows 8及以上支持),专门用于控制窗口内容的显示归属权限。标志,可以将窗口内容标记为“仅显示器可见”,从而阻止大部分截屏工具(包括系统快捷键和第三方软件)捕获窗口内容。在检测到截屏行为时(如通过钩子监控API调用),动态生成噪声图案覆盖窗口。(Win10 2004+):窗口完全从截屏中排除(内容显示为黑屏)。配合文件系统过滤驱动(如拦截截屏软件进程的创建)。:窗口内容仅输出到物理显示器,禁止被共享或捕获。(默认):无保护,允许截屏。

2025-03-31 16:38:45 710

原创 Windows 异步/同步读写文件

在Windows平台下,C++开发者常需要处理文件读写操作。针对不同的场景,选择**同步(Synchronous)或异步(Asynchronous)**方式对程序性能有显著影响。本文将深入解析两者的实现方法、适用场景及核心API的使用技巧。

2025-03-31 11:50:43 861

原创 C++ | for的多种使用方法

for 循环是 C++ 中最基础且灵活的控制结构之一,无论是遍历数组、处理容器,还是实现复杂逻辑,都离不开它的身影。随着 C++ 标准的演进(如 C++11、C++17),for 循环的用法变得更加多样化和高效。本文将从基础到高阶,全面解析 C++ 中 for 循环的多种使用方式,帮助你在不同场景下写出更简洁、更安全的代码。

2025-03-31 09:57:31 521

原创 C++ | std::function

std::function是 C++ 中管理可调用对象的利器,它通过统一的接口简化了代码逻辑,增强了灵活性。尽管存在一定的性能开销,但在大多数应用场景中,其带来的开发效率提升远超性能损失。合理利用可以使代码更模块化、可维护性更强。适用场景建议需要动态切换函数行为时实现回调、事件处理等机制时设计模式(如策略模式、观察者模式)的实现相关扩展结合std::bind绑定参数了解(C++17)实现通用调用。

2025-03-31 09:49:02 662

原创 深入探索Windows Hook技术:原理、内核级实现与高级应用

Hook(钩子)是Windows系统中用于监视和拦截特定事件的核心机制,通过注入自定义代码到目标进程的消息处理流程中,开发者能够捕获并处理键盘输入、鼠标操作、窗口消息等系统事件。

2025-03-28 16:02:46 892

原创 QScreen 捕获屏幕(截图)

Qt框架提供的QScreen类为开发者提供了跨平台的屏幕操作解决方案

2025-03-28 15:20:48 817

原创 QClipboard剪贴板操作

/ 创建MIME数据对象// 设置并保留所有权// 读取自定义数据。

2025-03-28 14:00:00 409

原创 Qt非阻塞延时实现

会导致线程阻塞,造成界面卡顿甚至程序无响应。测试环境:i7-10700K, Qt 5.15.2。在Qt开发中,当我们需要实现延时操作时,直接使用。:QDeadlineTimer需要Qt 5.8+:实际不会阻塞主线程,但会占用工作线程。:需要顺序执行但保持线程响应的场景。:所有界面更新操作必须在主线程执行。:跨线程操作时注意对象析构问题。:避免在循环中无限制处理事件。:根据需求选择合适精度方案。:需要精确控制的延时检测。:简单控制逻辑中的延时。:可与其他逻辑并行执行。:使用简单,线程安全。

2025-03-28 08:30:00 594

原创 QString高级操作与性能优化

作为核心字符串处理类,承担着文本操作、编码转换等重要职责。许多开发者仅使用基础功能,却忽视了其强大的高级特性。忽略BOM(Byte Order Mark)处理。等进阶技巧,助你写出更高效的Qt代码!支持所有Unicode字符。默认使用UTF-16编码。

2025-03-28 08:15:00 406

原创 QStandardPaths 获取系统标准路径

是Qt提供的一个静态工具类(位于QtCore模块),用于获取操作系统定义的标准路径。它屏蔽了不同平台间的路径差异,开发者无需手动拼接路径或编写平台判断代码,即可访问如文档目录下载目录临时目录等系统标准位置。

2025-03-28 08:00:00 1664

原创 深入理解函数调用约定:stdcall、cdecl、fastcall、thiscall 的区别与应用

在C/C++开发中,函数调用约定(Calling Convention)决定了函数参数如何传递、栈空间由谁清理、函数名修饰规则等底层细节。:由调用者(Caller)还是被调用函数(Callee)清理栈。:在逆向工程中,识别调用约定可帮助理解参数传递和栈平衡逻辑。略优,因为栈清理只需一次(在函数内部),但差异通常可以忽略。参数从右到左压栈(MSVC)或寄存器优先(GCC)。:不同编译器对调用约定的名称修饰规则不同(如。C/C++默认调用约定(非类成员函数)。A:确保调用约定一致,否则会导致栈错误。

2025-03-27 16:46:17 615

原创 C++ | constexpr

在C++中,constexpr是一个强大的关键字,它允许我们在编译时完成计算和对象的初始化,从而提升程序性能并增强代码的可维护性。从C++11到C++20,constexpr的功能不断扩展,成为现代C++开发中不可或缺的工具。本文将深入探讨constexpr的核心概念、使用场景及最佳实践

2025-03-27 16:38:45 432

原创 深入浅出Qt属性系统:原理、使用与实践

Qt属性系统基于元对象系统(Meta-Object System),通过Q_PROPERTY宏和QVariant类型实现。它不仅为对象提供了动态属性的支持,还与信号槽机制、样式表、动画系统等核心功能深度集成。本文将带您全面解析Qt属性系统的实现原理,并通过示例代码演示其在实际开发中的应用。

2025-03-27 08:15:00 1208

原创 Qt 日志输出(重定向)

Qt框架提供了灵活的日志系统,支持从简单的控制台输出到复杂的自定义日志处理。本文将详细介绍Qt中五种常用的日志输出和重定向方法,并附上完整代码示例。

2025-03-27 08:00:00 593

原创 C++ | new操作符的异常行为

new的异常行为是C++内存管理的核心问题之一。如果希望内存分配失败时返回空指针而非抛出异常,可以使用。的异常行为对编写健壮的内存管理代码至关重要。操作符)是可能触发异常的典型场景之一。:析构函数不应抛出异常,且需保证资源释放。分配失败,构造函数抛出异常,此时。在C++中,动态内存分配(通过。无法分配足够内存时,会抛出。:在性能关键代码中,使用。若对象的构造函数中通过。:使用RAII对象(如。

2025-03-26 08:00:00 339

C++ STL源码

C++ STL标准库源码、包含STL的所有容器、迭代器、内存池的实现

2019-07-16

蓝牙控制小车(QT on Android)源码

用QT编写的蓝牙控制小车的移动源码,包含蓝牙的搜索、连接、发送数据

2018-05-23

中国象棋Chess.rar

基于QT实现的中国象棋游戏,有联网对战、人机对战、同机对战三种模式

2019-07-15

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

TA关注的人

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