分类目录归档:后端be
C++编译优化之—so动态库依赖
C++反射实现—根据类名动态创建对象

我们在编写C++框架时,经常会涉及到一项基础技术,就是根据“一个动态库 + 一个类名称字符串“,动态的创建类对象。
C++疑难杂症定位之—IDA篇
C++ enable_shared_from_this解析
C++性能优化—CPU占用分析
C++常用数据结构性能分析
C++编译优化之—likely/unlikely
一、概述
在一些明确的场景下,程序员比CPU和编译器更了解哪个分支条件更有可能被满足。我们是否可将这一先验知识告知编译器和CPU, 提高分支预测的准确率,从而减少CPU流水线分支预测错误带来的性能损失呢?答案是可以!它便是likely和unlikely。在Linux内核代码中,这两个宏的应用比比皆是。下面是他们的定义:
gRPC概述
C++使用std::atomic实现并发无锁同步
C++11中引入了mutex和方便优雅的lock_guard,但是有时候我们想要一个性能更高的实现方式,本文主要讲解如何使用C++11中的原子操作类atomic来巧妙地实现无锁同步。
C++ lock_guard和unique_lock的区别
C++多线程编程需要对共享的数据进行写保护,以防止多线程在对共享数据成员进行并发写时造成资源争抢而导致出现崩溃或其他不符合预期的结果。通常的做法是在修改共享数据成员前先对互斥锁mutex进行lock加锁,在修改后再进行unlock操作,这个场景中经常会出现由于疏忽或异常导致lock之后未能unlock,最终导致死锁。
C++ std::static_pointer_cast详解
一、概述
static_pointer_cast从表面上看就是静态指针类型转换。细细看来,并不是那么简单,有一个隐形的限制条件。首先这个是c++11里的,更老的编译器不支持,其次指针是shared_ptr类型的,对于普通指针是无效的。还有一般只用在子类父类的继承关系中,当子类中要获取父类中的一些属性时,或工厂模式等需要通过父类参数接收不同子类实例的场景(当然了子类通过多态拥有自己的父类继承来的属性和行为,但是还想知道父类相应的属性和行为,这时,将父类的shared_ptr通过static_pointer_cast转化为子类的shared_ptr,这样就可以使得子类可以访问到父类的方法)。
C++进程间通信
C++线程池ThreadPool实现解析
C++带有线程操作,异步操作,就是没有线程池。一般而言,当你的函数需要在多线程中运行,但是你又不能每来一个函数就开启一个线程,所以你就需要根据资源情况固定几个线程来执行,但会出现有的线程还没有执行完,有的又在空闲,如何分配任务呢?这时你就需要封装一个线程池来完成这些操作,有了线程池这层封装,你就只需要告诉它开启几个线程,然后直接往里塞任务就行,并通过一定的机制获取执行结果。
C++智能指针(unique_ptr 、shared_ptr、weak_ptr、auto_ptr)
一、概述
智能指针:智能指针是一个类,用来存储指针(指向动态分配对象也就是堆中对象的的指针)。
C++的指针*与引用&
简单理解下:
C++内存管理
Cmake—-编写CMakeLists.txt文件编译C/C++程序
1.CMake编译原理
多线程std::cout乱序问题解决方法
问题描述
在C++多线程编程中,开发者往往使用cout来打印一些信息,但是往往被人忽略的是,cout在使用时可能会存在线程之间的打印信息乱串的问题,这个问题的原因是”<<“这个操作符是线程不安全的,会造成竞争问题,当采用多个<<拼接时,打印可能在<<时中断,例如下边的写法: