- 博客(127)
- 资源 (3)
- 问答 (2)
- 收藏
- 关注
原创 GCC /Clang __attribute__
告诉编译器这是 printf/scanf 风格函数,启用参数检查(位置从 1 开始)。函数无副作用(除了读取内存)。用于可变参数函数,检查尾部是否有 NULL 终结(常用于 varargs)。更严格:函数仅依赖其参数(不能读取可变内存或全局)。强制将函数中可内联的调用全部展开(可能导致代码暴涨)。将变量/函数放到指定段(用于嵌入式或特殊链接需求)。尽量/强制内联(可能被编译器在某些情况下忽略)。指定某些参数不应为 NULL(优化/警告提示)。设置类型或变量的对齐(影响 ABI、性能)。
2025-10-23 12:07:05
433
原创 Branch Pre --- CodeLayer
这篇文章主要介绍了C/C++中优化分支预测的技术手段。核心内容包括: 使用__builtin_expect宏为编译器提供分支预测提示,通过LIKELY/UNLIKELY宏封装常见用法,指导编译器优化代码布局。 介绍去分支化技术: 使用三元运算符+cmov指令避免跳转 查表法替代多条件判断 位运算技巧消除分支 现代C++17的[[likely]]/[[unlikely]]属性语法,以及冷热代码分离优化方法。 实际使用技巧和注意事项,强调错误处理适合UNLIKELY,随机分支考虑去分支化,并建议使用PGO和性能
2025-10-23 11:58:42
389
原创 Branch predictive(分支预测化)
程序中的条件语句、循环判断、本质上都会产生(conditional branch)—— 比如if/elseswitchfor/while的条件跳转。CPU 执行到分支指令时要决定下一条指令从哪儿来(执行true逻辑 or false逻辑)。现代 CPU 是(pipeline),如果等条件结果出来再继续,流水线会停顿,性能损失很大。。
2025-10-23 11:55:52
399
原创 Static Deinitialization Order Fiasco
同一翻译单元:静态对象的析构顺序确定(定义顺序)。跨翻译单元:析构顺序未定义 → 潜在未定义行为。典型问题:静态对象的析构函数访问了另一个跨单元静态对象。局部静态(推荐,C++11 后安全)。避免跨单元依赖。不析构(交给系统回收)。👉 这就是经典的,几乎所有大型 C++ 项目都会遇到。
2025-09-19 22:48:36
442
原创 microprofile
是一个开源的、可嵌入式高性能分析器库。它由 Jonas Meyer 开发,采用 MIT 协议,支持在 C/C++ 项目中便捷集成使用。microprofile 的核心优点在于易用性高性能和极低的集成成本。主要语言:C开源协议:MIT项目地址特色:单头文件、嵌入式、无需复杂依赖microprofile 凭借其极简设计和强大功能,成为 C/C++ 项目性能分析的优选工具。如果你正在寻找一个高效、易用的 profiler,不妨试试 microprofile,相信它会为你的项目性能优化带来显著提升!
2025-09-15 19:47:19
286
原创 Qt: WA_DontCreateNativeAncestors
可以精细控制某个控件的原生窗口行为,仅让当前控件变为原生窗口,而不会影响其父窗口和祖先窗口。这对于高性能嵌入、混合渲染、与平台底层 API 交互等高级场景很有用。
2025-08-07 22:20:43
389
原创 Qt::AA_DontCreateNativeWidgetSiblings 属性
Qt::AA_DontCreateNativeWidgetSiblings是Qt的应用程序属性,用于禁止创建原生窗口"兄弟"控件。该属性适用于需要自定义窗口外观(如无边框窗口)、使用第三方库或解决平台兼容性问题时,必须在QApplication实例化前设置。禁用后,Qt不再自动创建辅助窗口来实现阴影、透明等效果,需开发者自行实现。但可能影响某些Qt功能,如窗口特效和平台特定行为。
2025-08-07 01:33:22
411
原创 Windows美化增强方案
本文将介绍一套Windows系统的美化方案VPN toolsInstall steam : Official Website详细安装以及帐号注册等不过多赘述购买链接: steampoweredWallpaper Engine 是一款非常流行的桌面壁纸管理软件,支持动态壁纸(包括视频、互动式和动画等)。它为用户提供了一个丰富的自定义环境,不仅可以使用系统默认壁纸,还能让用户下载或创建个性化的动态壁纸,从而显著提升桌面美观和个性化程度。建议在设置打开以下选项:在创意工坊有很多的壁纸 订阅即可同样wallpap
2025-07-22 16:25:37
963
原创 我的创作纪念日
提示:你过去写得最好的一段代码是什么?提示:当前创作和你的工作、学习是什么样的关系。提示:可以和大家分享最初成为创作者的初心。提示:在创作的过程中都有哪些收获。提示:职业规划、创作规划等。
2025-05-09 16:20:31
202
原创 vscode 配置doxygen注释和snippet
本文介绍了如何在VSCode中配置Doxygen注释和代码片段,以提升C/C++代码的文档化效率。Doxygen注释原则涵盖了文件头、命名空间、类、结构、枚举、函数、变量、模块和分组的标注。文章还提供了常用的Doxygen指令表格,如@file、@brief、@author等,并展示了文件注释的示例代码。通过这些配置,开发者可以快速生成规范的代码注释,提升代码的可读性和维护性。
2025-05-09 16:12:38
1221
原创 c++ std::string_view
创建string_view时候不存在任何动态分配内存,不存在字符串的遍历:编译期确定字符串长度、对象大小,这种并不是什么奇技淫巧,因为早在运算符重载的时候,就有一个size_t参数,这个就是编译器传入的对象大小,而std::string_view,则是在编译期间传入字符串的指针和长度,构建对象。但是,std::string和std::string_view这两个类同时提供了只带字符串指针和两个版本的构造函数,默认的情况下,会调用构造,但是会调用带长度的版本,
2025-03-27 19:27:04
611
原创 const static constexpr
static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。在C++中,static静态成员变量不能在类的内部初始化。在类的内部只是声明,定义必须在类定义体的外部,通常在类的实现文件中初始化,被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来;
2025-03-27 18:48:13
1093
原创 Windows 安装libcurl库
需要先安装nasm 和 perlCompiler Platform 根据自己的环境进行选择即可VSpath :如果你的vs不是默认的C盘路径,就要指定你的VS安装路径,像我的就是D:\Program Files\Microsoft Visual Studio\2022\Enterprise"之后在vs中构建即可 需要重新添加包含目录等。
2025-03-27 18:46:21
925
原创 GetCurrentTime
根据你的项目需求和编译器支持情况,选择最适合的方案。Boost 是一个功能丰富的 C++ 库,提供了时间处理工具。是一个功能强大的格式化库,支持 C++11 及以上版本。• 功能强大,支持 C++11 及以上版本。• 代码简洁,类似于 C++20 的。• 类型安全,无需手动管理缓冲区。,提供了更现代化的时间处理方式。• 使用标准库函数,代码更简洁。• 功能强大,支持多种时间操作。,提供了更简洁的格式化方式。• 需要 C++20 支持。• 简单直接,兼容性好。• 支持多种格式化方式。• 代码简洁,现代化。
2025-03-15 23:30:21
757
原创 std::forward的使用技巧
是 C++11 中实现完美转发(Perfect Forwarding)的核心工具,其核心作用是在函数模板中保持参数的原始值类别(左值或右值),确保参数在多层传递过程中不会丢失引用属性。
2025-03-15 20:42:16
1073
转载 使用核心转储文件 + gdb 定位程序BUG
我们遇到了核心转储,这意味着计算机输出了核心文件.(核心文件是一个ELF文件,包含程序崩溃时的完整状态信息。我们输入一个很大的index来触发这个code dump。如果你当前目录没有生成。这样我们就得到了core文件。接下来使用gdb进行加载调试。其明确的给出了详细的错误信息。以下是一个简单的演示代码。
2025-03-14 14:48:59
50
原创 将DeepSeek接入你的桌面,QT&C++的炫酷桌面雏形
基于QT和C++开发的操作系统桌面DEMO雏形,后期我们会逐渐完善桌面基本功能和加入AI功能.将DeepSeek接入你的桌面,QT&C++的炫酷桌面雏形。更多强大的功能正在开发中…
2025-03-03 22:06:44
131
原创 linux 开发小记 perf strace
strace 能帮助你查看程序的具体行为,尤其是在调试时,有助于发现无法预见的错误或不明确的系统交互。可以追踪与操作系统直接交互的部分,对于性能瓶颈或资源泄漏也能提供很多线索。由于 strace 捕获了所有的系统调用,所以可能对程序的执行产生一定的性能影响。尤其在大量系统调用的程序中,性能影响较大。对于多线程程序,strace 可能无法完全准确地显示线程间的操作,尤其是涉及同步机制的系统调用。
2025-01-22 20:52:00
773
原创 Clang ThreadSafetyAnalysis Clang 线程安全分析
Clang 线程安全分析是一个 C++ 语言扩展,它对 代码中的潜在争用条件。分析是完全静态的(即编译时没有运行时开销分析仍然是正在积极开发中,但它已经足够成熟,可以部署在工业环境。它由 Google 与 CERT/SEI,并在 Google 的内部代码库中广泛使用。线程安全分析的工作方式与多线程的类型系统非常相似 程序。除了声明数据类型(例如 int、flout、 等),程序员可以(可选地)声明对该数据的访问方式 在多线程环境中进行控制。
2024-12-06 16:05:51
864
原创 Macro function
TAILQ_INITTAILQ_INIT宏是一个用于初始化尾队列头部的工具,它通过将tqh_first设置为NULL并将tqh_last设置为指向tqh_first的地址,确保队列可以从空状态正确地过渡到非空状态。这个设计使用了二级指针的概念,使得尾部插入操作更为高效和直接。这种结构广泛应用于需要动态管理链表的系统编程场景中。这种结构确保了宏在使用时会像一个普通的语句一样执行,而不会引起语法错误。例如,用户可以安全地在if语句中使用这个宏,而不会因为缺少大括号导致错误tqh_firstNULL。
2024-11-18 20:25:29
832
原创 Macro definition
这个函数告诉event_config在生成多线程event_base的时候,应该试图使用给定数目的CPU。这个函数的工作与event_base_new()类似,它将分配的event_base设置成当前的。选择各种方法时,函数会选择OS支持的最快方法。本文描述的函数有一些用于操作当前event_base的变体,这些函数与新版本函数的行为类似,只是它们没有event_base参数。这个函数在new_event_base被调用,传入的参数是event_config,根据cfg的内容来配置event_base。
2024-11-18 20:24:38
691
原创 event_base
这个函数告诉event_config在生成多线程event_base的时候,应该试图使用给定数目的CPU。这个函数的工作与event_base_new()类似,它将分配的event_base设置成当前的。选择各种方法时,函数会选择OS支持的最快方法。本文描述的函数有一些用于操作当前event_base的变体,这些函数与新版本函数的行为类似,只是它们没有event_base参数。这个函数在new_event_base被调用,传入的参数是event_config,根据cfg的内容来配置event_base。
2024-11-18 20:24:06
990
原创 event_base
这个函数告诉event_config在生成多线程event_base的时候,应该试图使用给定数目的CPU。这个函数的工作与event_base_new()类似,它将分配的event_base设置成当前的。选择各种方法时,函数会选择OS支持的最快方法。本文描述的函数有一些用于操作当前event_base的变体,这些函数与新版本函数的行为类似,只是它们没有event_base参数。这个函数在new_event_base被调用,传入的参数是event_config,根据cfg的内容来配置event_base。
2024-11-18 20:23:25
1511
原创 Macro definition
比如说,可以有两个事件因为某个给定的fd已经就绪,可以读取而成为激活的。默认情况下,每当未决事件成为激活的(因为fd已经准备好读取或者写入,或者因为超时),事件将在其回调被执行前成为非未决的。然而,如果设置了EV_PERSIST标志,事件就是持久的。标志是被忽略的:可以在添加事件的时候设置超时,也可以不设置。表示指定的文件描述符已经就绪,可以读取的时候,事件将成为激活的。表示指定的文件描述符已经就绪,可以写入的时候,事件将成为激活的。每次执行事件回调的时候,持久事件的超时值会被复位。如果支持,则直接使用。
2024-11-18 20:22:16
1060
原创 Bufferevent and evbuffer
每个bufferevent都有一个输入缓冲区和一个输出缓冲区,它们的类型都是“struct evbuffer”。有数据要写入到bufferevent时,添加数据到输出缓冲区;bufferevent中有数据供读取的时候,从输入缓冲区抽取(drain)数据。evbuffer接口支持很多种操作,后面的章节将讨论这些操作。
2024-11-18 20:21:33
1024
原创 Bufferevent Advanced Topics
本章描述bufferevent的一些对通常使用不必要的高级特征。如果只想学习如何使用bufferevent,可以跳过这一章,直接阅读下一章。
2024-11-18 20:20:54
1103
原创 Bufferevent and SSL
bufferevent可以使用OpenSSL库实现SSL/TLS安全传输层。因为很多应用不需要或者不想链接OpenSSL,这部分功能在单独的libevent_openssl库中实现。未来版本的libevent可能会添加其他SSL/TLS库,如NSS或者GnuTLS,但是当前只有OpenSSL。OpenSSL功能在2.0.3-alpha版本引入,然而直到2.0.5-beta和2.0.6-rc版本才能良好工作。这一节不包含对OpenSSL、SSL/TLS或者密码学的概述。这一节描述的函数都在中声明。
2024-11-18 20:20:15
725
原创 Build event
eventlibevent的基本操作单元是事件。每个事件代表一组条件的集合,这些条件包括:文件描述符已经就绪,可以读取或者写入文件描述符变为就绪状态,可以读取或者写入(仅对于边沿触发IO)超时事件发生某信号用户触发事件所有事件具有相似的生命周期。调用libevent函数设置事件并且关联到event_base之后,事件进入“”状态。此时可以将事件添加到event_base中,这使之进入“”状态。
2024-11-18 20:19:24
702
原创 evbuffer
这两个函数的功能很简明:evbuffer_new()分配和返回一个新的空evbuffer;而evbuffer_free()释放evbuffer和其内容。
2024-11-18 20:14:09
1100
原创 DNS with libevent
libevent提供了少量用于解析DNS名字的API,以及用于实现简单DNS服务器的机制。我们从用于名字查询的高层机制开始介绍,然后介绍底层机制和服务器机制。
2024-11-18 20:13:19
991
原创 evconnlistener
两个evconnlistener_new*()函数都分配和返回一个新的连接监听器对象。连接监听器使用event_base来得知什么时候在给定的监听套接字上有新的TCP连接。新连接到达时,监听器调用你给出的回调函数。两个函数中,base参数都是监听器用于监听连接的event_base。cb是收到新连接时要调用的回调函数;如果cb为NULL,则监听器是禁用的,直到设置了回调函数为止。ptr指针将传递给回调函数。flags参数控制回调函数的行为,下面会更详细论述。
2024-11-18 20:11:55
604
原创 Variadic function
va_list在某些实现中,va_list实际上只是一个指向栈中某个位置的指针,也可能是更复杂的结构,用于记录当前参数的位置和相关信息。va_startsizeofva_start的目的是初始化va_list变量ap。它将ap设置为指向最后一个已知参数(last)之后的位置,即第一个可变参数的起始位置。&last返回last在栈中的地址,加上就是下一个参数的地址。va_arg+=sizeofsizeofva_arg用于从va_list中获取当前参数,并将ap移动到下一个参数的位置。先将ap。
2024-11-18 20:10:58
927
原创 Helper types and functions (libevent
event2/util.h>定义了很多在实现可移植应用时有用的函数,libevent内部也使用这些类型和函数。
2024-10-25 11:03:27
748
原创 libevent_structure
libevent 中的事件配置项。通过使用结构体,可以在 libevent 中定义和管理多个事件配置项,并按照链表的方式进行链接和访问。每个配置项都包含一个要避免使用的网络通信方法TAILQ_ENTRY 见:[[Macro function]]
2024-10-14 22:58:34
1093
c语言编写烟花代码源码(附带讲解文档)
2023-12-06
c++异常处理机制详解
2023-12-06
c++函数模板STL详解
2023-12-06
自己编写操作系统,运行ISO文件,遇到grub
2022-08-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅