c、c++
文章平均质量分 63
大鹏的NLP博客
梳理人工智能路上的点滴成长,分享思考与实践感悟,期待与各位同行交流共进。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 内存安全的未来:从 Safety Profiles 到 Safe C++
C++ 内存安全正探索两条路径:渐进式 Safety Profiles 与语言级 Safe C++。前者通过静态分析逐步强化现有代码安全,后者构建具严格生命周期与借用检查的子集,引入 safe/unsafe 标记显式管理风险。尽管提案如 P3390R0 等推动语言机制革新,但实现仍需编译器、标准库与生态协同。二者互补,共同应对内存漏洞挑战,助力 C++ 在性能与安全间寻求平衡。原创 2026-10-10 21:47:07 · 336 阅读 · 0 评论 -
C++ 三目运算与 RVO / NRVO:核心关系
C++三目运算不触发NRVO,其返回行为取决于表达式值类别。三目结果为lvalue时需拷贝,为prvalue时可能直接构造(尤其在C++17下)。即使无NRVO,也不一定发生拷贝;反之,三目为prvalue也不意味着所有分支零开销。优化关键在于:直接返回具名局部对象(如if分支)才可触发NRVO,而三目表达式本身无法实现此优化。原创 2026-09-24 20:30:00 · 294 阅读 · 0 评论 -
ONNX Runtime CUDA 推理优化实战:破解 C++ 比 Python 慢 28 倍的假象
C++ 代码本身没有任何性能缺陷;ONNX Runtime 的 C++ API 执行效率极高;真正的原因是 Benchmark 错误地将首次 CUDA Run 的 788ms 冷启动开销均摊到了稳定态推理中;引入标准 Warmup 后,C++ 在 CUDA EP 上的稳定态推理耗时瞬间恢复至 ~1ms,与 Python 完全一致。性能优化的核心不在于掌握多少复杂的调优选项,而在于建立严谨的测量意识——永远不要去优化凭空猜测出来的问题。原创 2026-08-28 22:02:27 · 376 阅读 · 0 评论 -
WSL2 资源治理:从 ONNX Runtime CUDA 编译 OOM 到 `.wslconfig` 防御配置
纠正机制认知:WSL2 默认内存上限为宿主物理内存的 50%(在 31.4GB 主机上约为 15.7GB),仅负责内存回收而非扩大内存上限。抓住 OOM 本质:大型 CUDA/C++ 工程编译 OOM 的核心矛盾,是并行任务产生的瞬时内存需求超过 WSL2 可用内存预算;其中NjobsN_{jobs}Njobs是最直接、最容易控制的变量。建立双层治理优先降低并发:通过显式设置-j N(本文示例使用-j 4)约束并发峰值;合理设置上限:通过.wslconfig设置memory与。原创 2026-08-26 21:13:24 · 330 阅读 · 0 评论 -
打通构建、测试与调试:C++ VSCode + CMake + GDB + TestMate 深度实践
本文针对 C++ 开发者在 Linux 环境下基于 VSCode 进行开发时遇到的调试卡顿、断点无法绑定以及单测管理繁琐等痛点,提供了一套完整的工程化解决方案。文章系统梳理了 GoogleTest 与 TestMate for C++ 插件的底层交互机制,详细讲解了通过 GDB Wrapper 拦截网络请求解决 `debuginfod` 卡顿的原理;同时深挖 CMake/Ninja 单配置生成器在 Debug/Release原创 2026-08-23 21:23:59 · 398 阅读 · 0 评论 -
通用 Linux 嵌入式板端 C/C++ ABI 与 Glibc 依赖治理规范
本文档制定了Linux嵌入式系统中C/C++ ABI与Glibc依赖治理规范,适用于ELF动态链接模型环境。核心原则要求验证整个ELF依赖闭包的ABI兼容性,重点管理GLIBC、GLIBCXX等符号版本需求。规范明确了标准交付方式,允许应用携带私有libstdc++和libgcc_s,但禁止覆盖系统glibc。特殊情况下支持自备完整glibc Runtime方案,但必须严格匹配loader和运行时库。最终提出10条工程铁律,强调必须确保所有版本需求被目标环境定义覆盖,而非简单比较版本号。关键结论是C++运行原创 2026-08-19 21:05:37 · 425 阅读 · 0 评论 -
VS Code GDB调试卡在Downloading separate debug info的根因及解决方法
摘要:本文分析了VS Code使用GDB调试时卡在"Downloading separate debug info"的问题原因,主要是Ubuntu 24.04默认启用调试符号下载、配置被覆盖以及GDB 15.1缺乏超时控制导致。最终解决方案是创建GDB包装脚本,强制注入空DEBUGINFOD_URLS环境变量彻底禁用联网下载。配置方法包括:1)创建gdb-no-debuginfod.sh脚本;2)修改launch.json指向该脚本;3)验证调试启动速度。该方案可确保调试秒启动,避免每次90秒的超时等待。原创 2026-08-06 15:58:03 · 368 阅读 · 0 评论 -
OpenHarmony 6.1(API23)端侧 AI Native C++ 交叉编译工具链配置与验证手册
本文详细介绍了OpenHarmony 6.1 (API 23) Linux Native SDK的部署流程。主要内容包括: 从华为云镜像下载SDK并完成SHA256校验 核心部署步骤:解压工具包、验证工具链完整性、配置永久环境变量 通过交叉编译测试验证环境配置成功 提供了官方资源链接和版本适配说明 整个部署过程采用命令行操作,并包含详细的关键命令和预期输出结果,确保开发者能顺利完成OpenHarmony 6.1的Linux Native开发环境搭建。原创 2026-07-21 21:31:48 · 356 阅读 · 0 评论 -
Could NOT find Boost (missing: uuid) 和 LNK2019 unresolved external symbol _Bcrypt*
代码】CouldNOTfindBoost(missinguuid)和LNK2019unresolvedexternalsymbol_Bcrypt*原创 2022-07-26 10:45:09 · 557 阅读 · 0 评论 -
cmake学习笔记
CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))。因此CMake的编译基本就两个步骤:cmake 指向CMakeLists.txt所在的目录,例如cmake … 表示CMakeLists.txt在当前目录的上一级目录。cmake后会生成很多编译的中原创 2022-06-07 16:52:48 · 867 阅读 · 0 评论 -
Modules C++
C++ Modules GCC 11已经支持https://gcc.gnu.org/projects/cxx-status.htmlC++23 features are available since GCC 11. To enable C++23 support, add the command-line parameter -std=c++2b to your g++ command line. Or, to enable GNU extensions in addition to C++23 fe原创 2022-01-05 10:05:48 · 846 阅读 · 1 评论 -
c++中std::map key使用智能指针笔记
#include <cstring>#include <cstdio>#include<map>#include<memory>#include <iostream>#include<string>using namespace std;struct Comparator : public std::binary_function<shared_ptr<string>, shared_p原创 2016-03-01 17:48:31 · 6662 阅读 · 0 评论 -
借助strtok实现split笔记
代码://借助strtok实现split#include <cstring>#include <cstdio>#include<iostream>using namespace std;/**strtok 函数定义 char *strtok(char *s,const char *delim); strtok()将字符串分割成一个个片段。s指向要分割的字符串,delim为分割字符串,原创 2016-03-01 12:45:37 · 807 阅读 · 0 评论 -
快速排序笔记
最坏时间复杂度:n2n^2,平均时间复杂度:nlgnn \lg n#include#includeusing namespace std;/** *基于分治思想。 *初始化慢者,比快者慢一步,中枢是最后一个数; *慢者始终指向快者最近邻的比中枢小的值,倾向于往前一步是大值, * 快者用于找寻第一个比中枢小的值,倾向于望后 一步是大值; * 找到后,更新慢者加1,并交换慢者原创 2016-01-24 10:20:48 · 455 阅读 · 0 评论 -
C++矩阵运算库推荐
Armadillo:C++下的Matlab替代品 Eigen3:强大且只需头文件 OpenCV:方便的计算机视觉计算库 ViennaCL:并行矩阵计算 PETSc:大规模并行科学计算 其他的矩阵计算库和资料最近在几个地方都看到有人问C++下用什么矩阵运算库比较好,顺便做了个调查,做一些相关的推荐吧。主要针对稠密矩阵,有时间会再写一个稀疏矩阵的推荐。欢迎关注我的独立博客:http://cvn转载 2016-03-07 15:14:58 · 12855 阅读 · 0 评论 -
折半查找笔记,C++实现
#include using namespace std;/** * @brief 折半查找 * @param arr 升序 * @param len * @param check * @return */int bsearch(const int* arr, const int& len, const int& check){ int start = 0; int en原创 2016-02-23 12:50:38 · 596 阅读 · 0 评论 -
循环有序数组的查找笔记
一个循环有序数组(如:3,4,5,6,7,8,9,0,1,2),不知道其最小值的位置,要查找任一数值的位置。要求算法时间复杂度为log2(n)。循环有序数组的性质: 1.将一个循环有序数组一分为二,一定得到一个有序数组和另一个循环有序数组 2.长度不超过2的循环有序数组其实就是有序数组。解答思路: 我们要先弄清楚这个循环有序数组的原数组是单调减的还是单调增。http原创 2016-02-22 22:03:21 · 4671 阅读 · 0 评论 -
ldconfig命令用法笔记
ldconfigldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig。 ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态 链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.原创 2016-04-08 11:31:43 · 18523 阅读 · 1 评论 -
c++ sin,cos,tan,atan,atan2
sin(角度*M_PI/180);原创 2016-04-18 16:45:57 · 5710 阅读 · 1 评论 -
C++数组声明的方式
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针数组指针:a pointer to an array,即指向数组的指针还要注意的是他们用法的区别,下面举例说明。int* a[4] 指针数组 表示:数组a中的元素都为int型指针 元素表示:*a[i] *(a[i])是一样的,因为[]原创 2016-04-21 09:18:21 · 5866 阅读 · 0 评论 -
C++ lambda笔记
基本语法简单来说,Lambda函数也就是一个函数,它的语法定义如下:[capture] (params) mutable/exception ->return-type {body} (1) [capture] ( params ) -> return-type { body } (2) [ capture ] ( params ) { body } (3)原创 2016-01-29 20:07:30 · 1219 阅读 · 0 评论 -
多线程:C++11 multithreading
环境配置: CONFIG += c++11 LIBS +=-lpthreadthread with a member functionWe’ll start with a simple example of a C++11 thread with a member function: #include #include #include using names原创 2016-04-22 10:35:22 · 654 阅读 · 0 评论 -
How to parse command line parameters.
#include <iostream>using namespace std;// 控制台传的参数: "./a.out -f /home/in.txt -o /home/out.txt"int main(int argc, char* argv[]) { // argv[0]="./a.out"; // argv[1]="-f"; // argv[原创 2017-02-09 11:03:41 · 686 阅读 · 0 评论 -
gcc-6.3.0 构建
installcd gcc-6.3.0./contrib/download_prerequisitesmkdir buildcd build../configure --prefix=/opt/gcc-6.3 --disable-multilib --with-system-zlib --enable-languages=c,c++make -j4make in原创 2017-02-28 09:19:08 · 1826 阅读 · 0 评论 -
opencv坐标系确定笔记
#include #include #include #include#includeusing namespace std;using namespace cv;int main(){ shared_ptr image=make_shared(); image->create(Size(256, 500), CV_8UC1); coutcols<<e原创 2015-09-11 17:48:18 · 1478 阅读 · 0 评论 -
kdevelop launch configuration
kdevelop cmake launch configuration not an executablehttps://apaku.wordpress.com/2008/12/15/howto-create-build-and-run-a-simple-kdevelop4-project/https://userbase.kde.org/KDevelop4/FAQ原创 2017-03-24 11:27:27 · 1453 阅读 · 0 评论 -
makefile之一:基本结构
#“井”号表明注释。target(要生成的文件): dependencies(被依赖的文件) #命令前面用的是“tab”而非空格。 命令1 命令2 命令3 . . . 命令n#可以使用“\”表示续行。注意,“\”之后不能有空格!editor: main.o原创 2015-03-30 20:18:25 · 881 阅读 · 0 评论 -
基于Qt开发的自由软件汇总的网站
http://qt-apps.org/原创 2014-06-17 08:49:14 · 1434 阅读 · 0 评论 -
vector,deque,list,map,数组比较与分析
vector和数组区别:vector是个容器,array不是vector可以知道自己的大小,array不知道vector可以变大变小,这里变小指的是元素数目,array不能变大变小数组在内存中分配的连续空间,多次分配释放后会有内存碎片,而vectors是动态增长的,当前的容量(capacity)不足就申请一块当前容量2倍的新内存空间,然后将所有的老元素全部拷贝到新内原创 2014-09-30 11:29:15 · 1583 阅读 · 0 评论 -
轻量级C++插件框架
(推荐)X3PY: https://github.com/rhcad/x3py Doc: https://github.com/rhcad/x3py/wiki(内容较多)原创 2014-10-11 08:51:39 · 3360 阅读 · 0 评论 -
基于boost和otlv4连接oracle进行简单查询笔记
头文件:#ifndef DAO_H#define DAO_H#include #include#define OTL_ORA10G#define OTL_ORA10G_R2//#define OTL_ORA9I // Compile OTL 4.0/OCI9i//#define OTL_ORA_TIMESTAMP // enable Oracle 9i TIMESTAMPs [w原创 2014-12-09 21:29:02 · 1844 阅读 · 0 评论 -
Qt获取当前时间的两种方式笔记
QDateTime dt; QTime time; QDate date; dt.setTime(time.currentTime()); dt.setDate(date.currentDate()); QString currentDate = dt.toString("yyyy:MM:dd:hh:mm:ss"); qDebug()<<curren原创 2014-12-08 20:51:48 · 20501 阅读 · 0 评论 -
boost正则简单字符串替换笔记
头文件#ifndef REGEXUTIL_H#define REGEXUTIL_H#include #include #include"string"using namespace std;using namespace boost::xpressive;class RegexUtil {public: RegexUtil(); virtual ~RegexUt原创 2014-12-09 21:27:30 · 1716 阅读 · 0 评论 -
c++调用java笔记
头文件#ifndef OBJECT_H#define OBJECT_H#include "jni.h"class Object{public: Object(); static bool BeginJVM(); static bool EndJVM();protected: static JNIEnv* env; static JavaVM*原创 2014-12-09 21:26:25 · 629 阅读 · 0 评论 -
基于boost简单读写xml文件笔记
头文件:#ifndef BOOSTXMLUTIL_H#define BOOSTXMLUTIL_H#include #include #include #include #include #include #include using namespace std;using namespace boost::property_tree;class BoostXmlUtil原创 2014-12-09 21:29:35 · 6854 阅读 · 0 评论 -
基于Qt的xml简单的读写笔记
XXXXXXXXXXX XXXXXXXXXXX1#include "xmlutil.h"XmlUtil::XmlUtil(){}void XmlUtil::writeXml(QString& path,QMap& map){ QFile file(path); if(not file.open(QIODevice::ReadWrite))原创 2014-12-08 20:54:22 · 918 阅读 · 0 评论 -
神经网络BP的简单实现
/* * 将三位二进制数转为一位十进制数 * * 作者:zhangdapeng * */#include #include #include #includeusing namespace std;const int layer=2;//BP层的数量const int in_unit=3; //输入单元数const int hide_unit=100;//隐藏原创 2015-01-06 21:47:22 · 2030 阅读 · 0 评论 -
Qt 5.2.1跨平台部署测试
Process Explorer是一款让使用者能了解看不到的在后台执行的处理程序,能显示目前已经载入哪些模块,分别是正在被哪些程序使用着,还可显示这些程序所调用的 DLL进程,以及他们所打开的句柄。Process Explorer最大的特色就是可以中终任何进程,甚至包括系统的关键进程!原创 2014-06-23 12:27:32 · 1187 阅读 · 0 评论 -
C语言中函数strtok的使用笔记
#include #include int main(void){ char str[] = "how,are,you"; char *p = NULL; const char* delim = ","; p = strtok(str, delim); while(p != NULL){ printf("the chara原创 2015-04-19 22:21:38 · 598 阅读 · 0 评论 -
printf、sprintf与fprintf 的用法区分
printf、sprintf与fprintf 的用法区分1)fprintf() #include int fprintf( FILE *stream, const char *format, ... ); fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.因此fprintf()可以使得信息输出到指定的文件.对于其输出格式参数,和pr原创 2015-04-09 20:54:55 · 1191 阅读 · 0 评论
分享