arm的prefetch和分支预测
prefetch
prefetch 可以把DDR内存取到cache中
分支预测
arm 自带分支预测
参考
https://zhuanlan.zhihu.com/p/22469702
https://zhuanlan.zhihu.com/p/22469702
https://wudaijun.com/2019/04/linux-perf/
arm neon指令集
arm neon 是什么
NEON是ARM架构中的一个SIMD引擎,全称为NEON Advanced SIMD,主要用于嵌入式设备中进行向量化计算,以提高计算性能。
NEON的主要特征和作用包括:
提供了128位的向量寄存器,支持并行计算。
支持多种整数和浮点数据类型,如8位/16位/32位/64位整数,以及32位和64位浮点数。
提供了丰富的指令集,可以进行向量加减乘除、逻辑、加载/存储等运算。
通过单指令多数据(SIMD)技术,可以同时处理多个数据,大大提升嵌入式设备的多媒体和信号处理能力。
可以与ARM的普通寄存器和指令无缝配合使用。
应用在图像处理、语音识别...
cpp17 新特性shared_mutex 读写锁
C++17引入了shared_mutex,可以实现读写锁
std::shared_mutex是C++17引入的一种共享互斥锁,它具有以下主要特征:
支持两种互斥的访问模式:独占(exclusive)和共享(shared)。
多个线程可以同时获得shared ownership,从而实现并发读。
但只能有一个线程可以获得exclusive ownership,从而对数据的修改是互斥的。
shared_mutex通过读写锁(shared_lock、unique_lock)进行访问控制。
std::shared_mutex适用于读多写少的场景,例如:
std::shared_mutex mutex;
// 写操作需要unique锁
void write_data() {
...
深入剖析AddressSanitizer实现机制,内存错误检测原理与性能开销分析
引入
ASan是google提供的一个内存检测工具,(来自gpt3.5)
ASan通过在编译时插入额外的代码来实现内存错误检测,并提供了相应的运行时库来捕获和报告错误。可以知道通过一下方式实现:
插桩:ASan使用编译器插桩技术,在编译时修改源代码,插入额外的代码。这些额外的代码用于跟踪内存分配、释放和访问操作,以及检测内存错误。
内存分配器:ASan使用自定义的内存分配器,用于跟踪分配的内存块,并在每个内存块之前和之后添加红区(redzone)。红区是一段未分配的内存,用于检测缓冲区溢出。
彩色标记:ASan使用彩色标记技术,将分配的内存块分为不同的颜色,并将颜色信息存储在内存块的元数据中。这样,在访问内存时,ASan可以根...
c++ stl deque 原理与底层实现
内存分配
分区的,不是连续内存
和vector的不同
性能比较
使用总结
参考
https://en.cppreference.com/w/cpp/container/deque
C++高性能线程安全计时器实现 - 支持Tracing可视化
本项目能够对指定代码块或函数等进行计时,并利用Chrome tracing进行可视化
将InstrumentorTimer.h和InstrumentorMacro.h(可选的,一些宏定义)正确引入后。
Instrumentor::BeginSession("SessionName"); // Begin session
{
InstrumentationTimer timer("Profiled Scope Name"); // Place code like this in scopes you'd like to include in profiling
// Code Blocks
// timer.Stop(); ...
C++ shared_ptr的实现原理与线程安全性深度剖析
std::shared_ptr 是 ,用于管理动态分配的对象。它提供了引用计数的机制,允许多个 shared_ptr 共享同一个对象,并在不再需要时自动释放对象。
底层实现:
std::shared_ptr 的底层实现通常使用两个部分:一个控制块(control block)和一个指向实际对象的指针。控制块通常包含引用计数、指向对象的指针以及其他辅助信息。当创建一个 shared_ptr 对象时,控制块会被动态分配,并将引用计数初始化为 1。每当有一个新的 shared_ptr 对象指向相同的对象时,引用计数就会增加。当引用计数减少到零时,控制块会负责释放对象的内存。
线程安全性:
std::shared_ptr 的默认实现在引用计数的增加和减少操作上是线程安全的。这意味着多个线程...
共计 128 篇文章,16 页。