
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
chronoduration(时间间隔)、clock(时钟)与timepoint(时间点)。

本文介绍了Linux系统中内存分配机制。内存布局分为栈和堆,分别向下和向上扩展。malloc底层主要通过brk/sbrk和mmap系统调用实现:brk扩展堆内存,mmap用于大内存分配。ptmalloc作为内存池管理机制,使用chunk结构管理内存块,包含prev_size、size等字段。分配流程包括搜索空闲链表、扩展堆或使用mmap、拆分大块;释放流程则涉及标记空闲、合并相邻块和缩小堆。ptm

本文介绍了shared_ptr的两种初始化方法:常规初始化(与new配合使用)和make_shared函数,并比较了两者的区别。常规初始化存在内存泄漏风险且效率较低,而make_shared通过单次内存分配同时存储对象和控制块,提高了效率。调试分析显示make_shared将强引用和弱引用计数初始化为1,并实现内存连续分配。此外,make_shared避免了C++17前参数求值顺序导致的内存泄漏问

本文探讨了C++中new和delete操作符的底层机制。通过反汇编分析发现,new操作符实际上调用了operator new函数(内部使用malloc分配内存)和构造函数;delete操作符则先调用析构函数,再通过operator delete(内部使用free)释放内存。实验表明,内存分配时会额外存储分配大小信息。文章还演示了如何重载类内的operator new/delete来自定义内存管理,

本文介绍了C++模板元编程(TMP)和SFINAE技术。模板元编程通过在编译期完成计算和逻辑推导,利用模板特化、递归和类型萃取等特性实现编译期编程。示例展示了编译期常量计算、条件分支、类型萃取和递归模板等核心概念。SFINAE(替换失败非错误)技术则允许编译器在模板参数替换失败时尝试其他特化版本,C++20后可用Concepts替代大部分SFINAE应用。文章还介绍了标准库<type_tra

本文介绍了C++模板元编程(TMP)和SFINAE技术。模板元编程通过在编译期完成计算和逻辑推导,利用模板特化、递归和类型萃取等特性实现编译期编程。示例展示了编译期常量计算、条件分支、类型萃取和递归模板等核心概念。SFINAE(替换失败非错误)技术则允许编译器在模板参数替换失败时尝试其他特化版本,C++20后可用Concepts替代大部分SFINAE应用。文章还介绍了标准库<type_tra

本文介绍了shared_ptr的两种初始化方法:常规初始化(与new配合使用)和make_shared函数,并比较了两者的区别。常规初始化存在内存泄漏风险且效率较低,而make_shared通过单次内存分配同时存储对象和控制块,提高了效率。调试分析显示make_shared将强引用和弱引用计数初始化为1,并实现内存连续分配。此外,make_shared避免了C++17前参数求值顺序导致的内存泄漏问

本文探讨了C++中new和delete操作符的底层机制。通过反汇编分析发现,new操作符实际上调用了operator new函数(内部使用malloc分配内存)和构造函数;delete操作符则先调用析构函数,再通过operator delete(内部使用free)释放内存。实验表明,内存分配时会额外存储分配大小信息。文章还演示了如何重载类内的operator new/delete来自定义内存管理,

counter这个操作不是原子的,它包含了三个步骤:读取counter的值、将值加 1、将结果写回counter。在多线程中,线程可能会更改共享变量,但是编译器优化可能会将共享变量存入缓存中,当线程修改该共享变量时,主线程可能取到的还是缓存中的值,从而导致错误发生。volatile是 C++ 中用于修饰变量的关键字,核心作用是「告诉编译器不要对该变量做优化,每次读写都直接访问内存,而非寄存器。vo

之前在文章中写过适配算能模型的一篇文章,有关算能SE7盒子适配yolov5的相关问题,其中给出了yolov5的前处理代码,此代码中前处理用的是原生opencvd的一些接口,所以不免会增添cpu的负担。其实盒子中自带的sophon-opencv并不是让你去使用原生接口的,而更倾向于bmcv。使用bmcv可以将前处理的一些操作放到推理卡上处理,能在一定程度上减轻cpu和内存的负担。








