自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (6)
  • 收藏
  • 关注

原创 Linux下自动生成c++ UML图

在打开的网页中,可以看到生成的文档目录和各个文档页面的链接。Doxygen是一个用于从注释的C++源代码中生成文档的工具,支持多种编程语言,包括C,Objective-C,C#,PHP,Java,Python等。需要注意的是,图形化表示的内容具有交互性,可以进行缩放、拖动等操作,便于优化代码架构。Doxygen会自动在配置文件中指定的目录中生成一些文件,包括HTML文档、图片、配置文件等。在生成文档后,进入生成的文档目录,用firefox浏览器打开想要查看文件。RECURSIVE递归子目录。

2023-11-10 16:15:19 373 1

原创 什么是原子操作?为什么需要原子操作?

如果这个更新操作不是原子的,那么在A线程正在更新这个位置时,B线程可能会同时访问这个位置,导致B线程得到的值是旧的、不正确的。而如果这个更新操作为原子操作,那么在A线程正在更新这个位置时,B线程会被阻塞,直到A线程完成更新操作,这样就可以保证B线程得到的值是正确的。但是复杂的内存操作处理器不能自动保证其原子性,比如跨总线宽度、跨多个缓存行、跨页表的访问。而原子操作可以保证在任何情况下,对共享资源的访问都是原子的,即每个操作在执行过程中不会被其他线程打断,因此可以避免数据不一致的问题。

2023-09-14 17:02:19 283 1

转载 GCC中-O1 -O2 -O3 优化的区别是什么?

一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在指令之间设置断点,使用gdb中的查看变量的值,改变变量的值等。并且把获取最快的编译速度作为它的目标。当被启用之后,gcc将会试图改变程序的结构(当然会在保证变换之后的程序与源程序语义等价的前提之下),以满足某些目标,如:代码大小最小或运行速度更快(只不过通常来说,这两个目标是矛盾的,二者不可兼得)。

2023-08-28 11:06:06 570 1

原创 如何ARM Linux 交叉编译?

交叉编译其实是相对于本地编译(native build)来说的,相信大家最开始学习 C/C++ 这些语言的时候,都是在电脑上写程序,然后在电脑上编译生成可执行文件,最后在电脑上运行。程序的编辑—>编译—>运行,整个过程都是在一台 X86 电脑上。

2023-08-24 19:13:26 363 1

原创 矢量索引和矢量数据库之间有什么区别?

像 FAISS(Facebook AI Similarity Search)这样的独立矢量指数可以大大改善矢量嵌入的搜索和检索,但它们缺乏任何数据库中存在的能力。简而言之,矢量数据库为处理矢量嵌入提供了一个卓越的解决方案,它解决了独立的矢量指数的局限性,如可扩展性挑战、繁琐的整合过程,以及缺乏实时更新和内置安全措施,确保了更有效和简化的数据管理体验。

2023-08-07 19:24:56 93 1

原创 Faiss编译选项示例

Faiss源码编译选项比较复杂,但常用的也就那么几个,不常用的采用默认值就好,用到时再根据需要进行设置。

2023-08-07 19:13:19 111 1

原创 OpenCL 安装ocl-icd

OpenCL 安装ocl-icd

2022-12-20 18:49:24 1347

原创 OpenCL事件对象的理解

事件对象可以用来标记命令的执行状态,状态有以下几种:CL QUEUED -﹣表示任务已经进入命令队列。除 user event 外,其它所有事件的初始状态都为 CL QUEUED 。CL SUBMITTED -- user event 的初始状态。对于其他类型的 event ,该状态表示任务命令已经由主机提交给设备。CL RUNNING -﹣表示设备已经开始执行命令。CL COMPLETE -﹣表示命令执行完成。Eror code -﹣错误代码为负整数值,表示命令执行终止。非...

2022-04-21 12:06:09 223

原创 什么是异构计算?

不同的架构设计的处理器具有不同的特点,而不同的应用也具有不同的特点,应当为不同特点的应用使用不同的处理器,使用一种处理器架构满足各个不同市场的需求是痴心妄想。为了提高系统的性能,则必须要把应用的特点和处理器的特性相互配合,这就是协同设计。从应用的特点来看,不同的应用具有不同的需求:有的应用需要大量的访问数据;有的应用局部性很好,而有的应用局部性又很差。从不同的处理器的特点来看,不同的处理器适合做不同的事情:如X86 处理器为进行延迟优化,以减少指令的执行延迟为主要设计考量(当然今天的X86 处理器设计中

2022-02-14 10:25:32 1735

转载 VS Code Server的离线安装过程

因为经常要开发Linux平台程序,而工作环境只有Windows桌面端与Linux服务器,并且都是运行在内网环境下,无法直接访问外网。想要在这种环境下找到一个趁手的开发工具,能够运行在Windows系统下,又拥有Linux开发环境(至少能够自动跳转、自动补全),所以我选择了使用VS Code + Remote SSH插件的方案,而问题在于如何在离线的情况下在Linux服务器上部署VS Code Server。需要以下几个环节:1)安装ssh工具2)SSH-Remote插件3)服务器安装vs..

2022-01-18 15:10:27 3028

原创 GDB调试,如何查看STL容器值?

GDB调试,如何查看STL容器值?

2021-12-16 10:35:22 2910

原创 虚函数可以用inline吗?

如果虚函数通过对象被调用,倒是可以inlined,但大部分虚函数调用动作是通过对象的指针或引用完成的,此类行为无法被inlined。inlined意味着编译期将调用端的调用动作被函数本体取代,若无法知道哪个函数该被调用时,编译器没法将该函数加以inlining。 (more effective C++ )inline virtual确实有碰到过,无论显式还是隐式,inline都只是一个申请,最终由编译器决定内联还是不内联。具体点,先说不适合内联的情况:1,编译器会保证多态性,但是多态的时候就不

2021-10-22 16:09:46 1029

原创 JSON是什么?

JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。那么,JSON到底是什么?JSON就是一串字符串 只不过元素会使用特定的符号标注。{} 双括号表示对象[] 中括号表示数组"" 双引号内是属性或值: 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)所以 {"name": "Michael"} 可以理解为是一个包含name为Michael的对象而[{"name": "M

2021-08-31 14:42:56 202

转载 C++ 字符串详解

目录前言1.动态字符串1.1.C风格的字符串1.1.1.易错点1.1.2.strcpy()1.1.3.strcat()1.1.4.对字符串用sizeof()关键字或者strlen()函数的区别1.1.5.安全C库1.2.字符串字面量1.2.1.字面量1.2.2.原始字符串字面量1.3.C++ std::string类1.3.1.有C的字符串,为什么还有C++的字符串?1.3.2.使用string类1.3.3.std::string字面量1.3.4.高级数值转换1.3.5.低

2021-08-06 15:59:43 519

转载 什么是扇区,磁盘块,页?

扇区,sector 磁盘块,IO Block 页,page 命令索引扇区,sector硬盘的读写以扇区为基本单位。磁盘上的每个磁道被等分为若干个弧段,这些弧段称之为扇区。硬盘的物理读写以扇区为基本单位。通常情况下每个扇区的大小是 512 字节。linux 下可以使用fdisk -l了解扇区大小:$ sudo /sbin/fdisk -lDisk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectorsUnits: sectors o..

2021-08-04 14:16:51 5356

原创 多线程中的信号量

信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作。信号量不一定是锁定某一个资源,而是流程上的概念,比如:有 A,B 两个线程,B 线程要等 A 线程完成某一任务以后再进行自己下面的步骤,这个任务并不一定是锁定某一资源,还可以是进行一些计算或者数据处理之类。信号量(信号灯)与互斥锁和条件变量的主要不同在于” 灯” 的概念,灯亮则意味着资源可用,灯灭则意味着不可用。信号量主要阻塞线程,不能完全保证线程安全,如果要保证线程安全,需要信号量和互斥锁一起使..

2021-07-31 15:55:06 2056

原创 线程池的应用

线程池原理简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用,当线程池中的线程都在处理任务时,就没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行,下面是线程池的工作原理图:线程池的实现原理:线程池的组成主要分为 3 个部分,这三部分配合工作就可以得到一个完整的线程池:任务队列,存储需要处理的任务,

2021-07-31 15:52:13 269

原创 Linux进程锁方案(内附代码封装)

1)互斥锁多进程之间同步可以用互斥锁进行实现,默认情况下,互斥锁的属性是在一个进程的多线程使用的。多进程因为分开之后内存是相对独立的,所以要实现进程间互斥锁,必须要把互斥锁放在共享内存里使用,在 pthread_mutex_init 初始化之前,修改其属性为进程间共享,即设置互斥锁的属性为PTHREAD_PROCESS_SHARED。但是,如果某个进程在获得了锁之后崩溃并且未释放锁,则其他进程会阻塞造成死锁,但是文件锁,则会自动释放该锁。2) 文件锁借助 fcntl 函数来实现文件锁,可

2021-07-31 15:48:38 1384

转载 ProtoBuf介绍及应用

在网络通信和通用数据交换等应用场景中经常使用的技术是 JSON 或 XML,而在最近的开发中接触到了 Google 的 ProtoBuf。在查阅相关资料学习 ProtoBuf 以及研读其源码之后,发现其在效率、兼容性等方面非常出色。在以后的项目技术选型中,尤其是网络通信、通用数据交换等场景应该会优先选择 ProtoBuf。自己在学习 ProtoBuf 的过程中翻译了官方的主要文档,一来当然是在学习 ProtoBuf,二来是培养阅读英文文档的能力,三来是因为 Google 的文档?不存在的!看完这

2021-06-25 14:25:50 1094

线程池原理以及适用场景

线程池原理以及适用场景

2021-06-25

数据实时曲线的绘制与滚动显示

数据实时曲线的绘制与滚动显示:将采集到的数据绘制成曲线,反映变化趋势,可以滚动显示

2012-11-11

浓度分析仪串口通讯

浓度分析仪串口通讯,这是基于浓度分析仪的串口应用实例

2012-11-11

电子秤串口通讯

电子秤串口通讯,本实例通过电子秤的制作,展现了串口的应用

2012-11-11

串口调试程序

vb串口调试程序,通过MScomm控件来实现简单的串口通信

2012-11-11

Visual Basic串口通信及编程实例

Visual Basic串口通信及编程实例

2012-11-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除