摘要:目录 一、内存泄漏 一、介绍 二、几种内存泄露的场景 三、预防与排查 1、valgrind 二、内存越界 一、介绍 二、几种内存越界的情况 三、预防与排查 一、内存泄漏 一、介绍 内存泄漏,是指在程序代码中动态申请的、堆上的内存 由于某种原因、在使用后没有被释放,进而造成内存的浪费。 少部分的内存泄
阅读全文
随笔分类 - C++/C
摘要:1、apt-get方式(假设默认安装到/usr/local/include里(可在终端中输入locate eigen3查看位置),若实际中默认安装到了/usr/include的话,可以对应替换下面命令的相应部分)运行命令: sudo apt-get install libeigen3-dev 运行命
阅读全文
摘要:代码中通过#include<Eigen/Eigen>即可引入Eigen库,但是直接g++编译的时候是通不过的。提示 Eigen/Eigen: No such file or directory。这里需要将Eigen库加入到库中,可以通过CMakeLists实现,如下: CMakeLists.txt
阅读全文
摘要:Eigen是一个C++开源线性代数库:提供矩阵的线性代数运算。 注:Eigen是一个只有头文件的库 cmake使用eigen库 find_package(Eigen3) INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIR}) 程序中使用eigen库,引用各功能头文件 #
阅读全文
摘要:在使用动态库开发部署时,遇到最多的问题可能就是 undefined symbol 了,导致这个出现这个问题的原因有多种多样,快速找到原因,采用对应的方法解决是本文写作的目的。 可能的原因 依赖库未找到这是最常见的原因,一般是没有指定查找目录,或者没有安装到系统查找目录里 链接的依赖库不一致编译的时候
阅读全文
摘要:今天被客户测出来一个问题:程序执行中报错,报错内容如下 XXXX:symbol lookup error:/home/....../libpdfium.so:undefined symbol:CRYPT_MD5Generate 报错分析: 这个问题表明是符号未定义的问题,而且直接定位于产品链接的第三
阅读全文
摘要:我们知道, 在C++中, 是允许函数重载的, 也就引出了编译器的name mangling机制, 今天我们要介绍的c++filt命令便与此有关。 对于从事linux开发的人来说, 不可不知道c++filt命令的使用。 在linux开发中, 如果要调用基础模块库, 就要包含对应的头文件, 并在make
阅读全文
摘要:前言 有一个需求是将一个宏和一个字符串拼接,然后在代码中拿到这个字符串,记录一下。 方案 首先,我们知道非常常见的一个宏的拼接和展示字符串的宏定义: #define CONTACT(x,y) x##y //拼接 #define STR(x) #x //转字符串 这种宏定义在开发中是很常见的! 但是,
阅读全文
摘要:【并发编程二十一】c++20协程(co_yield、co_return、co_await ) 一、协程分类 1、控制机制划分 2、有栈(stackfull)/无栈(stackless)划分 二、c++20协程 三、co_yield 1、demo 2、相关知识点介绍 四、co_return 五、co_
阅读全文
摘要:【并发编程十七】c++实现一个线程池 一、线程池原理 二、实现重点 三、个人理解 四、实验 简介:大多数系统上,若因某些任务可以与其他任务并行处理,就分别给他们配备专属的线程,则这种做法不切实际。但是只要有可能,我们还是想充分利用可调配的并发算力。线程池正好可以帮助我们达到目的:讲可同时执行的任务都
阅读全文
摘要:【并发编程十九】芊程(fiber) 一、前言 二、芊程(fiber) 1、线程中使用芊程 2、获取当前芊程数据 3、从芊程切回线程 4、创建新的芊程 5、删除芊程对象 6、在不同芊程间切换 7、芊程局部存储 三、demo 四、芊程和协程 简介: 我们本篇先讲解下芊程,下一篇再介绍协程,因为有了芊程的
阅读全文
摘要:【并发编程十八】线程局部存储(TLS) 一、定义 二、线程局部存储的实现 1、windows系统 2、linux系统 3、c++11 三、windows系统 1、线程局部存储是分块的(TLS_MINIMUM_AVAILABLE) 2、获得索引 3、通过索引:存储数据、取出数据 4、释放索引和内存块
阅读全文
摘要:【并发编程十六】无锁数据结构(2)——无锁队列 一、简介 二、原理图 三、代码:实现 三、代码:demo 四、其他知识点 1、delete 关键字 2、delete 的扩展 上一节我们讲解了无锁栈容器,这节我们讲解下无锁队列,如果大家还有基础知识不了解,建议先看下我的上两篇原子操作和无锁栈容器两篇文
阅读全文
摘要:【并发编程二十】协程(coroutine) 一、线程的缺点 二、协程 三、优点 四、个人理解 五、协程库 1、window系统 2、unix系统(包括linux的各个版本) 2.1、makecontext 2.2、swapcontext 2.3、setcontext 3、第三方库 3.1、Boost
阅读全文
摘要:【并发编程十五】无锁数据结构——无锁栈 一、无锁数据结构体的优点和缺点 1、优点 2、缺点 二、无锁数据结构分类 三、无锁栈容器 1、简介 2、无锁栈原理图 3、添加节点(push) 4、添加数据(添加节点demo) 5、弹出数据 6、弹出数据demo 7、无锁栈和智能指针 8、无锁栈内存泄露的解决
阅读全文
摘要:【并发编程十三】c++原子操作(1) 一、改动序列 1、改动序列 2、预测执行 二、原子操作及其类别 1、原子操作 2、非原子操作 3、原子类型 三、标准原子类型 1、标准原子类型的两种实现方式 2、原子操作的用途 3、原子操作的宏 四、操作std:atomic_flag 1、简介 2、使用说明 3
阅读全文
摘要:【并发编程十四】c++原子操作(2)——实现自旋锁 一、自旋锁简介 二、使用自旋锁 三、不使用自旋锁 四、分析 简介在介绍完原子操作,我们这篇使用c++提供的原子操作,实现一个自旋锁,并加以利用。 原子操作参见【并发编程十三】c++原子操作 一、自旋锁简介 “自旋”可以理解为“自我旋转”,这里的“旋
阅读全文
摘要:【并发编程九】c++线程同步——互斥(mutex) 一、互斥 1、mutex 1.1、mutex 1.2、 lock_guard 1.3、 RAII 2、std::recursive_mutex 3、std::shared_mutex、std::shared_lock、std::unique_loc
阅读全文
摘要:【并发编程十】c++线程同步——条件变量(condition_variable) 一、互斥 二、条件变量 1、为何要引入条件变量? 2、不使用条件变量 3、使用条件变量 3.1、互斥锁有什么问题? 3.2、条件变量 3.3、条件变量成员函数 3.4、demo 3.4、总结 三、future 四、信号
阅读全文
摘要:【并发编程八】线程和线程同步 一、线程 二、线程的实现 1、linux系统 2、windows系统 3、c++11 3.1、线程的操作 3.2、管理当前线程的函数 三、线程同步 1、linux系统 1.1、互斥体(mutual exclusive、Mutex) 1.2、信号量(semapphore)
阅读全文