自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(229)
  • 资源 (19)
  • 收藏
  • 关注

原创 【C++基础知识】odygrd/quill 中编译时计算可变参数个数的原理解析

基本思路: - 利用预处理器参数匹配规则:当宏调用时,参数从左到右依次匹配 - 通过参数位置的偏移来获取参数数量

2025-04-03 15:33:58 352

原创 【性能优化点滴】odygrd/quill在编译期做了哪些优化

Quill 是一个高性能的 C++ 日志库,它在编译器层面进行了大量优化以确保极低的运行时开销。Quill 通过这些优化实现了纳秒级的日志记录性能,在基准测试中通常比 spdlog 等库快 2-5 倍,尤其适合高频日志场景(如金融交易系统)。

2025-04-03 11:26:40 562

翻译 【GCC文档】编译指示(Pragmas)【翻译】

原文链接:https://gcc.gnu.org/onlinedocs/

2025-04-02 20:03:54 9

原创 【C++基础知识】 C 预处理器中的 #line 指令详解

是 C/C++ 预处理器的指令之一,主要用于。这样,如果生成的代码有语法错误,编译器会报告。如果宏展开后报错,默认情况下错误指向的是。文件,但编译错误时,我们希望错误指向。文件),而不是生成的中间代码。:普通代码通常不需要手动使用。(因为行号会自动递增)。,但有时我们需要知道。

2025-04-02 18:01:55 734

原创 【C++基础知识】PIMPL模式详解(Pointer to IMPLementation)

/ 必须在外联定义(因为unique_ptr需要完整类型删除)

2025-04-02 16:59:53 300

原创 【C++常见问题】【C++基础知识】全局变量菱形链接问题详解

全局变量菱形链接问题是C++多模块编程中的典型问题,源于头文件被多次包含导致的变量多重定义。通过正确使用extern声明、static限定或C++17的inline变量,可以有效避免这一问题。理解这一问题的本质有助于编写更健壮的C++代码,特别是在大型项目中管理全局状态时。

2025-04-02 15:40:27 391

原创 【C++基础知识】Name Mangling(名字修饰)机制的作用与解决的问题

Name Mangling 是 C++ 实现高级特性(如重载、模板、命名空间)的基石,但也导致二进制兼容性问题(不同编译器修饰规则不同)。Name Mangling 将函数名、参数类型、命名空间等信息编码成唯一的修饰名(Mangled Name),确保链接器能正确匹配调用。C++ 的命名空间和类作用域允许不同上下文中定义同名符号,但链接器需要全局唯一的符号名。C++ 允许函数重载(多个同名函数,参数不同),但底层链接器(如 Linux 的。模板函数/类在实例化时会生成不同的具体实现,链接器需要区分它们。

2025-04-02 10:30:04 371

原创 C++基础知识--从宏定义变量名看相关展开顺序

两个宏的目的是想定义一个不重复的变量名(根据行号),但是只有。实际开发中应优先选择。

2025-03-31 16:17:41 404

原创 【性能优化点滴】odygrd/quill 中将 MacroMetadata 变量声明为 constexpr

在日志库中将元数据声明为。

2025-03-28 18:07:39 778

原创 C++基础知识--模版

学习 C++ 模板需要系统性地掌握从基础到高级的多个知识点。建议按照「基础 → 进阶 → 元编程 → 实战」的顺序逐步学习,每个阶段配合实践项目巩固理解。

2025-03-28 17:41:50 1020

原创 C++基础知识--std::deque

(Double-Ended Queue,双端队列),它是 C++ STL(标准模板库)中的一个容器。下面详细介绍它的特性、用法及实现原理。高效插入和删除元素(O(1) 时间复杂度)。(双端队列)是一种动态数组,支持在。通常由多个固定大小的。如果需要高性能双端操作,

2025-03-27 15:52:07 398

原创 【性能优化点滴】odygrd/quill 中RotatingSink使用std::deque<FileInfo>存储文件列表且FileInfo不包含完整路径的原因

std::deque:因高效头尾操作和缓存友好性。无完整路径:避免冗余存储,路径动态拼接更灵活,符合日志滚动场景的典型需求。

2025-03-27 10:52:31 247

原创 《深入探索 C++对象模型》-- 对象实例直接访问成员 VS 通过指针或引用访问成员 P99扩展解释

在虚继承场景下,

2025-03-25 21:37:08 400

原创 【性能优化点滴】odygrd/quill 中一个简单的标记位作用--降低 IO 次数

它是高性能日志库中常见的优化手段之一,尤其适用于需要平衡实时性和吞吐量的场景。

2025-03-24 21:06:25 463

原创 【性能优化点滴】odygrd/quill 中的冷热属性宏

这段代码通过编译器特定的属性指令,指导代码生成策略,是高性能 C++ 库中常用的优化手段。理解这些属性有助于开发低延迟、高吞吐的系统级软件。在日志库等性能敏感场景中,通过精细控制代码布局和分支预测,可提升 5-15% 的吞吐量(实测数据)。通过条件编译确保在不支持这些属性的编译器上宏定义为空,保证跨平台兼容性。集中定义属性宏,避免代码中散落编译器特定的属性语法。日志库中被用于性能关键路径的优化。这些宏在 quill。

2025-03-24 19:48:35 351

原创 【性能优化点滴】枚举值转字符串的两种方式对比(switch VS std::array)

(需优化实现),其效率通常更高且更易维护。开始,可将数组改为 constexpr。

2025-03-24 15:06:09 355

原创 【CMake】学习路径和关键知识点

作为 C++ 开发者,学习 CMake 的核心目标是,尤其是跨平台和依赖管理。

2025-03-24 11:48:39 558

原创 【CMake】include_directories命令的 system 属性

SYSTEM属性:用于标记第三方或系统头文件路径,抑制编译器警告。适用场景:管理外部依赖的头文件,保持项目编译输出的整洁。慎用原则:仅对第三方代码使用,避免掩盖项目自身的代码问题。

2025-03-21 13:37:03 804

原创 【cmake】控制依赖传递

PRIVATE:隔离内部细节,避免依赖泄露。PUBLIC:传递接口依赖,确保依赖链完整。INTERFACE:定义纯接口或配置需求。正确使用这三个修饰符,可以确保构建系统的高效、清晰和可维护性。

2025-03-21 11:32:57 807

原创 C++基础知识-- 虚拟继承

虚拟继承是 C++ 多重继承中解决菱形问题的关键机制,但会引入额外开销和复杂性。在实际开发中,应谨慎使用,优先考虑更简单的设计模式(如组合或单一继承)。理解其底层原理有助于优化关键代码和调试复杂继承问题。它通过确保共享基类(虚基类)在继承体系中仅存在一个实例,避免数据冗余和成员访问的二义性。是一种特殊的继承方式,旨在解决多重继承中的。关键字声明虚拟继承,使共享基类(的访问均指向该共享实例。

2025-03-19 22:26:36 555

原创 c++基础知识--返回值优化

NRVO 是编译器的优化行为,并非强制要求。不同编译器(如 GCC、Clang、MSVC)的优化策略可能不同。编译器将调用方的目标内存地址隐式传递给函数,函数内部直接在该地址上构造对象,避免拷贝。是一种编译器优化技术,用于消除函数返回一个局部对象时的拷贝或移动操作。NRVO 是 C++ 高性能编程的重要优化手段,合理利用可显著提升代码效率。的一种更复杂的变体,适用于返回具名对象(即给局部变量命名的对象)的场景。若函数中存在多个分支返回不同的具名对象,编译器可能无法应用 NRVO。

2025-03-19 21:51:16 266

原创 权限 0755和 0777 的含义

在 Linux 和类 Unix 系统中,文件或目录的权限由三位或四位的八进制数字表示(如。理解权限机制是 Linux 系统管理的基础,合理分配权限能有效保障系统安全和数据隐私。权限值的计算方式是将这些值相加。

2025-03-19 11:48:34 313

原创 C++基础知识 -- vector、unordered_map 和 map扩容机制

底层是哈希表,通过哈希函数将键映射到桶(bucket)。哈希冲突(不同键映射到同一桶)需特殊处理。本质是一个动态数组,其内存空间连续,支持随机访问(O(1)时间复杂度)。理解这些机制有助于在开发中合理选择容器,优化性能并规避潜在问题(如 vector 的迭代器失效)。需要频繁插入/删除键值对,红黑树在保证 O(log n) 操作的同时,减少了平衡调整的开销。是三个核心容器,它们的底层实现机制直接影响性能和适用场景。,每个桶存储一个链表(或红黑树)。在 C++ STL 中,)时,会自动触发扩容。

2025-03-12 19:55:43 817

原创 《程序员的自我修养—链接、装载与库》-- 对书中常见段的讲解总结

书中通过分析目标文件的结构(如 ELF 格式),解释了这些段如何被链接器组织、操作系统加载,最终形成进程的内存映像。理解这些段的划分,对优化程序体积、分析内存泄漏、调试底层问题至关重要。

2025-03-11 17:24:52 321

原创 《程序员的自我修养:链接、装载与库》一静态库和动态库的核心内容总结

《程序员的自我修养:链接、装载与库》一静态库和动态库的核心内容总结。

2025-03-11 15:30:09 381

原创 八皇后问题的几种常见解法及对应的 C++ 实现代码

根据问题规模选择合适的实现:小规模用经典回溯(易读),大规模用位运算优化(高效)。:每行皇后必在不同列,转化为寻找列索引的排列,并检查对角线。:用位掩码记录列和对角线的占用状态,减少判断时间。:逐行放置皇后,检查每个位置是否与已有皇后冲突。

2025-03-06 17:22:51 126

原创 回溯算法通俗讲解

想象你在玩一个多结局的文字冒险游戏,每次选择都会影响后续剧情。为了找到完美结局,你每做一个选择就「存档」,如果发现这条路走不通,就「读档」回到上一个选择点,尝试其他选项——这就是回溯算法的思想。试着用这个框架去解决LeetCode上的回溯标签题目吧(如子集、括号生成、单词搜索等),实践中会加深理解。常见应用场景:排列/组合、子集、分割字符串、棋盘问题(N皇后、数独)、图路径搜索等。(回溯)来遍历所有可能解的算法,适用于需要穷举但存在约束条件的问题。,找出所有和为8的组合(可重复使用数字)。

2025-03-06 16:55:45 249

原创 八皇后问题--如何计算皇后的攻击范围

计算一个皇后的攻击范围,本质上就是找出棋盘上所有会被她直接攻击到的位置

2025-03-06 16:46:25 351

原创 c++基础知识(六)

在C++中,拷贝构造函数和移动构造函数是用于对象初始化的两种关键机制,它们分别针对不同的资源管理场景。通过合理使用拷贝与移动构造函数,可在保证正确性的同时优化资源管理效率,是C++现代编程的核心技术之一。

2025-02-18 21:02:18 759

原创 从 0 开始使用 cursor 开发一个移动端跨平台应用程序

通过 Cursor 和 React Native,你可以快速开发一个跨平台移动应用。Cursor 提供了现代化的开发环境和强大的工具支持,而 React Native 则提供了高性能和跨平台能力。结合这两者,你可以高效地开发和测试你的应用,并最终打包发布到各大应用商店。

2025-02-12 20:15:02 1417

原创 汉语和英语的语言特点

理解这些特点有助于跨越语言屏障,实现更精准的跨文化交流。两种语言的差异本质反映了东西方思维方式的深层分野:汉语体现。(天人合一),英语则反映。

2025-02-07 17:55:13 848

原创 程序员的自我修养(链接、装载与库)--摘录与汇总(二)

因为编译器编译期间无法确认是模块内的还是模块外的很明显,外部模块的全局变量是和装载地址有关的,也就是“变化”的,按照 PIC 的基本思想,需要把这部分变化的挪到数据段中,而数据段中存放这类数据的叫做。

2024-10-14 19:46:38 943

原创 程序员的自我修养(链接、装载与库)--摘录与汇总(一)

1、“未初始化的全局变量”在目标文件中并未放到 .bss 段中,而是标记为一个 COMMON 类型的变量,这是因为“未初始化的全局变量”是一个弱符号,其最终占用的大小未知,所以编译器此时无法为该弱符号在 BSS 段分配空间。在链接之前,目标文件中的所有段的 VMA(虚拟地址 Virtual Memory Address) 都是 0,因为虚拟空间还没有被分配,所以他们默认都为 0,等到链接之后,可执行文件中的各个段都被分配到了相应的虚拟地址。而每个副本进程的数据区域是不一样的,他们是进程私有的。

2024-09-29 21:11:21 920

原创 C++基础知识(五)

尽管 struct 和 class 在功能上非常相似,

2024-09-05 21:56:38 288

原创 sqlite3 相关知识

WAL 模式 VS 日志模式特性WAL 模式日志模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始事务时写入日志文件,完成后再更新主数据库。读操作读

2024-09-05 15:09:33 744

原创 程序员的自我修养--术语随笔

总之,PLT 是为了实现共享库的动态链接而设计的一个重要的数据结构。它能够在程序运行时动态地解析共享库函数的地址,从而使得程序在不同的环境中能够正确链接到共享库中的函数。这对于实现共享库的延迟绑定和动态链接非常重要。当程序调用共享库中的函数时,实际上是首先跳转到了 PLT 的相关条目。这个 PLT 条目会调用动态链接库中的函数。(或者类似的函数),这个函数会进行符号解析和重定位。

2024-09-02 21:19:05 322

原创 C++基础知识(四)

链接时重定位和装载时重定位特性链接时重定位装载时重定位发生时机发生在编译器进行静态链接或动态链接时发生在程序加载到内存并准备执行时作用将各个目标文件、库文件中的位置无关的代码链接成一个单独的可执行文件或库文件,并对符号进行最终的地址绑定。将可执行文件或共享库中的引用符号和实际地址进行绑定,确保程序能够正确地访问共享库中的函数和数据。阶段链接阶段装载阶段静态链接 VS 动态链接特性静态链接动态链接生成的文件大小独立性独立

2024-09-02 10:21:23 329

原创 C++常用方法

【代码】C++常用方法。

2024-08-28 20:25:35 297

原创 C++基础知识(三)

【代码】C++基础知识(三)

2024-08-28 10:05:23 479

原创 C++基础知识(二)

特性声明定义内存分配不分配内存分配内存功能提供类型信息,对编译器声明名称声明并创建实际的变量或函数实现示例int x;

2024-08-20 20:15:55 348

Visio详尽教程

Visio详尽教程

2013-02-20

phpadmin亲测可用版

phpadmin是用来远程连接MySQL数据库的客户端软件,用户可以使用该软件连接并管理您的数据库。 本版本楼主亲测,修改即可使用

2013-01-25

JAVA核心技术:卷Ⅰ基础知识

JAVA核心技术:卷Ⅰ基础知识(原书第8版)高清中文PDF 目录: 第1章 Java程序设计概述  1.1 Java程序设计平台  1.2 Java“白皮书”的关键术语   1.2.1 简单性   1.2.2 面向对象   1.2.3 网络技能   1.2.5 安全性   1.2.6 体系结构中立   1.2.7 可移植性   1.2.8 解释型   1.2.9 高性能   1.2.10 多线程   1.2.11 动态性  1.3 Java Appletc与Internet  1.4 Java发展简史  1.5 关于Java的常见误解 第2章 Java程序设计环境  2.1 安装Java开发工具箱   2.1.1 下载JDK   2.1.2 设置执行路径   2.1.3 安装源代码库和文档   2.1.4 安装本书中的示例   2.1.5 导航Java目录  2.2 选择开发环境  2.3 使用命令行工具  2.4 使用集成开发环境  2.5 运行图形化应用程序  2.6 建立并运行appletc 第3章 Java基本的程序设计结构  3.1 一个简单的Java应用程序  3.2 注释  3.3 数据类型   3.3.1 整型   3.3.2 浮点类型   3.3.3 char类型   3.3.4 boolean类型

2013-01-21

DHTML 手册

DHTML 手册

2012-12-31

Annotated Solution Guide

Annotated Solution Guide

2012-12-31

api帮助文档

api帮助文档 [api帮助文档].J2EE_API.chm

2012-12-31

Hibernate3.2 API(中文版)

Hibernate3.2 API(中文版)

2012-12-31

影院管理系统

课程设计,含数据库,由多人开发而成,直接可用

2012-12-31

JAVA编程百例

JAVA编程百例,实际上是99个,全代码还有class文件

2012-12-31

Javascript特效大全

Javascript特效大全

2012-12-30

vmware汉化程序

vmware汉化程序VMware_Workstation_full-8.0.0-471780.exe,执行程序即可,不用移动汉化包

2012-12-23

sql经典数据库

sql经典数据库直接安装就可以的,打开.sql文件,全选语句,执行,然后保存,就会得到案例数据库了,有northwind和pubs两个

2012-12-23

BackTrack中文指南

bt5指南,基本工具有wpa破解,wep以及各种分析,bt5各种安装方式,无线配置方式

2012-12-22

经典SQL语句大全

经典SQL语句大全

2012-12-16

NIIT课堂笔记

如果需要修改表结构,一定要保证表里面是没有数据的 alter table stu add sage int not null ALTER TABLE 相关的语句: 1. 添加新列 ALTER TABLE Test ADD stu VARCHAR(20) NULL ;--向表名为Test的表中,添加列名为stu数据类型为varchar每一行都为空的列 --此处添加的时候没有column,因为向表中添加一般默认就是列了,故而不用声明是添加列 2. 删除列 ALTER TABLE Test DROP COLUMN stu ;--删除表名为Test的表中,列名为stu的列 3. 更改列的数据类型 ALTER TABLE stu ALTER COLUMN ID int ;--修改表stu中,列名为ID的列的类型为int column字段名,也就是列名 alter 修改,改变

2012-12-11

创建一个多边形Active控件

一、 课程设计目的 1、 了解Windows编程的基础知识,掌握控件的基础知识。 2、 控件是对数据和方法的封装,通过课程设计了解控件的应用及创建. 3、 掌握VC++开发应用程序的一般步骤和方法。 4、 通过课程设计,实际掌握面对对象的程序设计方法,了解C++面向对象的设计方法和技巧,有效地、深刻地理解课程设计内容,体会理论、方法和设计的原则;培养分析实际问题和解决问题的能力,具备使用面向对象程序设计开发工具设计实际系统的能力 二、 课程设计内容与要求 创建一个多边形ActiveX控件(并设计一个使用该控件的应用程序)。 实现了一个ActiveX控件,它在一个圆内部有个正多边形,当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部单击将会使多边形的边数在当前的基础上-1,并能改变多边形的颜色,还可以输入边数来改变多边形的边数,并编辑了一个程序,是控件可以在应用程序中使用。 三、 系统分析与设计 1、系统分析 Active控件是由 Microsoft 基础类库 (MFC) 提供的其他控件类(以前称为 OLE 控件),可以在 Windows 应用程序的对话框中使用,或在万维网的 HTML 页中使用,本次创建的Active控件主要是在其上显示一个圆其内部有多边形,并通过一系列操作更改其边数和颜色。 为控件添加属性并为应用此控件添加方法,使其觉有相对的稳定性,便于移植。 (1)信息:计算并记录鼠标输入的坐标,判断其属于圆内还是圆外,并做出相应的动作,更改多边形的边数及颜色。 (2)行为:当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部单击将会使多边形的边数在当前的基础上-1,并能改变多边形的颜色 (3)表示: IPolyCtl是包含定制的方法和属性的接口,_IPolyCtlEvents接口是一个内部接口,建立各变量与接口之间的连接。

2012-12-10

动态链接库运算器

一、 课程设计目的 学会用C++语言和数据结构知识实现表达式的解析与计算;学会使用动态链接库技术进行编程;学会编辑、编译、运行MFC应用程序的基本过程.学会MFC可视化编程技术。 二、 课程设计内容与实现的功能 1.C++语言的顺序结构,分支结构,循环结构,函数,结构体,指针,MFC可视化编程技术。 2.数据结构中的二叉树数据组织、存贮、后序遍历及其操作。 3. 使用动态链接库进行函数模块的设计,实现计算功能。 4.编程中使用了动态连接库技术; 能实现表达式的输入,解析与计算 三、 系统分析与设计 1、系统分析 应用程序使用DLL可以采用两种方式:一种是隐式链接,另一种是显式链接。在使用DLL之前首先要知道DLL中函数的结构信息。Visual C++6.0在VC in目录下提供了一个名为Dumpbin.exe的小程序,用它可以查看DLL文件中的函数结构。另外,Windows系统将遵循下面的搜索顺序来定位DLL: 1.包含EXE文件的目录,2.进程的当前工作目录, 3.Windows系统目录, 4.Windows目录,5.列在Path环境变量中的一系列目录。 1.隐式链接 隐式链接就是在程序开始执行时就将DLL文件加载到应用程序当中。实现隐式链接很容易,只要将导入函数关键字_declspec(dllimport)函数名等写到应用程序相应的头文件中就可以了 2.显式链接 显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。不过实现显式链接要麻烦一些。在应用程序中用 LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来,动态链接库的文件名即是上述两个函数的参数,此后再用GetProcAddress()获取想要引入的函数。自此,你就可以象使用如同在应用程序自定义的函数一样来调用此引入函数了。在应用程序退出之前,应该用FreeLibrary或MFC提供的AfxFreeLibrary释放动态链接库。 2、系统设计: 按照系统设计要求,用Visual C++设计和开发一个MFC应用程序---高级计算器。计算器的界面设计、计算功能实现、算式计算和动态链接库的使用等。提交由需求分析:系统设计说明、系统技术文档、系统使用说明书和源程序代码为附录构成的实验报告。 2.1、模块设计: 1. 计算器界面 计算器界面包括主题“高级计算器”和背景图片以及电子日历。在计算区上有显示文本框和数字按钮以及运算符按钮。在计算区上部分有运算模式选择模块和小提示语句。 2. 模块功能简介 系统分为多个模块,分别为计算模块、错误分析模块、界面显示模块和模式选择模块。其中计算模块用来进行各种基本的加、减、乘、除的运算并且显示运算结果;错误分析模块用来进行错误处理;界面显示模块用来美化计算器界面;模式选择模块用来进行运算模式的选择和切换,以实现不同的运算要求

2012-12-10

空空如也

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

TA关注的人

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