自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(120)
  • 收藏
  • 关注

原创 github Copilot的使用总结

在编写check_vector_value接口的时候,你在接口内输入if,会自动看到提示建议的代码,当前这个代码大部分可能不能完全符合你的需求,但是可能会有一定借鉴意义。Ctrl + . 或 Cmd + .(Mac): 打开建议框,显示更多关于建议的选项,如查看更多建议、查看文档等。Ctrl + Space 或 Cmd + Space(Mac): 打开建议框,显示Copilot的建议列表。Tab 键: 接受当前选中的建议,将其插入到代码中。3. 可以找出重复代码,并删除重复代码,重写代码。

2024-04-24 17:04:46 261

转载 C++ std::conditional的说明

【代码】C++ std::conditional的说明。

2024-04-21 16:02:37 7

转载 c++ std::enable_if的用法

首先gt_zero是一个模板函数,typename std::enable_if::type是函数的返回值类型,std::enable_if一般是由两部分组成,第一个参数是一个判定式,当判定式为真时,std::enable_if::type的这个type数据成员存在,且值为bool,如果没有第二个参数,则默认值为void。功能:检查 T 是否为整数类型。

2024-04-21 15:35:45 6

转载 C++ std::tuple总结

C++11引入了一个新的较实用的模板类型,std::tuple,也即是元组。元组是一个固定大小的不同类型(异质,heterogeneous)值的集合,也即它可以同时存放不同类型的数据。类似于python中用小括号表示的元组类型。C++已有的std::pair类型类似于一个二元组,可看作是std::tuple的一个特例,std::tuple也可看作是std::pair的泛化。std::pair的长度限制为2,而std::tuple的元素个数为0~任意个。

2024-04-21 15:16:52 10

转载 [C++]虚析构函数的作用

C++中的虚析构函数到底什么时候有用的,什么作用呢。

2024-04-14 11:27:12 12

原创 关于strtok 函数的说明

头文件:函数strtok在中。str:要分割的字符串delim:用于分割的字符集合strtok函数原理与使用方法:第一次调用:strtok(char *s,char *delim),其中字符串delim是分隔识别符,在s中寻找首次出现在delim中的字符,把该字符替换为\0。如果找不到,不对原字符串进行改变。第二次调用:把第一个参数设为NULL,第二个参数含义不变。返回值:每次的返回值返回分隔后的下一个字符串的首地址。注意,分隔完成后原字符串已经被被改变了。

2024-04-03 15:42:40 774

转载 CPU 3级缓存

比如,有一个 int array[100] 的数组,当载入 array[0] 时,由于这个数组元素的大小在内存只占 4 字节,不足 64 字节,此时需要16个元素才能凑满64个字节,那么CPU 就会顺序加载数组元素到 array[15] ,意味着 array[0]~array[15] 数组元素都会被缓存在 CPU Cache 中了,因此当下次访问这些数组元素时,会直接从 CPU Cache 读取,而不用再从内存中读取,大大提高了 CPU 读取数据的性。缓存行越大,局部性空间效率越高,但读取时间慢。

2024-03-31 12:11:02 48

转载 多核编程之 CPU Cache

该缓存行只被缓存在该CPU的缓存中,并且是被修改过的(dirty),即与主存中的数据不一致,该缓存行中的内存需要在未来的某个时间点(允许其它CPU读取请主存中相应内存之前)写回(write back)主存。CPU 架构下,一致性的保证就比较复杂,比如多个 CPU Cache 都缓存了某个变量的值,但那个变量被其中一个核修改了值,其他 CPU 核心内的缓存如何能及时感知并刷新缓存?该状态意味着该缓存行可能被多个CPU缓存,并且各个缓存中的数据与主存数据一致(clean),当有一个CPU修改该缓存行中,

2024-03-31 11:47:09 21

转载 C++ Perf性能调优+火焰图调优

系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化。性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码。代码优化的目标是针对具体性能问题而优化代码或编译选项,以改善软件性能。

2024-03-31 11:30:07 54

转载 C++20中的span容器

span 是 C++20 中引入的一个新的标准容器,它用于表示连续的一段内存区间,类似于一个轻量级的只读数组容器。span 是一个轻量级的非拥有式容器,它提供了对连续内存的引用。span 的主要用途是作为函数参数,可以避免不必要的内存拷贝,并且可以防止悬垂指针和空指针引用的问题。它的定义在头文件 <span> 中,并位于 std 命名空间中。span 包含了一个指向连续内存区域的指针以及它所占用的大小,可以通过它来访问这个内存区域中的元素。

2024-03-24 10:49:59 80

转载 性能调优之工具---perf

Perf 是内置于Linux 内核源码树中的性能剖析(profiling)工具。它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。可用于性能瓶颈的查找与热点代码的定位。linux2.6及后续版本都自带该工具,几乎能够处理所有与性能相关的事件。

2024-03-23 22:06:26 59

转载 ARM CPU 之 PMU部件(性能监控单元)

9.CPU流水线(CPU pipeline)CPU流水线的工作方式就像工业生产上的装配流水线,在CPU中由5-6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5-6步后再由这些电路单元分别执行,这样就能实现一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。6.写命中(write hit)当处理器将操作数写回到一个内存缓存的区域时,它首先会检查这个缓存的内存地址是否存在行中,如果存在一个有效的缓存行,则处理器将这个操作数写回到缓存,而不是写回到内存,这个操作被称为写命中。

2024-03-23 21:40:55 97

转载 ARM PMU详解及使用

PMU即性能监视器,本文只对ARM架构的PMU进行阐述,它运行时可以收集关于处理器和内存的各种统计信息。对于处理器来说这些统计信息中的事件非常有用,你可以利用它们来调试或者剖析代码,很明显这东西是用来测量性能与调优的。之前有段时间在做性能的优化,它是一种硬件实现的机制,因此测量的结果也是比较可信的。

2024-03-23 20:49:53 87

转载 perf_event框架之:ARM PMU硬件

这几个寄存器的bit field分布都相同,如上图所示,分别用来配置PMU counter中断的使能和关闭,以及检查PMU counter的溢出状态。许多体系结构都包含PMU(Performance Monitoring Unit)硬件,用于跟踪、计数系统内部的一些底层硬件事件,如与CPU有关的事件(执行指令数、捕获异常数、时钟周期数等)、与cache有关的事件(data/inst./L1/L2 cache访问次数,miss次数等)以及与TLB有关的事件等。(二)用于配置计数事件的寄存器。

2024-03-23 20:41:43 57

原创 Split a set of datas(Python)

【代码】Split a set of datas(Python)

2024-03-10 15:32:22 351 1

原创 不同数据类型占用内存大小(Python)

【代码】不同数据类型占用内存大小(Python)

2024-03-10 15:30:18 369

原创 Splitting data and data conversion(Python)

【代码】Splitting data and data conversion(Python)

2024-03-10 15:28:51 347

原创 ODP(Open Data Plane)

3. ODP API 规范ODP由三个各自独立又相关联的组件组成。首先,ODP是一个抽象的API规范,用于描述数据面应用程序的功能模型。该规范涵盖了许多常见数据面应用程序的编程需求,如接收、操作、传输数据包,但是并不要求这些功能具体如何实现。这是非常有意义的,正因为ODP API没有一个优选实施例,它们允许在支持ODP实现的各种平台上运行ODP,并进行各种创新开发。为了实现这一目标,ODP API使用了抽象数据类型描述,其定义留给ODP的实现者。例如,ODP数据包由类型为。

2024-03-10 15:21:35 930

转载 进程,线程与多核,多cpu之间的关系

周而复始,一直这样执行下去。cpu的根本任务,就是执行指令,对计算机来说,都是0,1组成的序列,cpu从逻辑上可以划分为3个模块:控制单元、运算单元和存储单元。),速度最快,每个核上都有一个 L1 缓存,L1 缓存每个核上其实有两个 L1 缓存, 一个用于存数据的 L1d Cache(Data Cache),一个用于存指令的 L1i Cache(Instruction Cache)。包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;

2024-03-10 11:03:55 28

转载 Python中import语句用法详解

在实际应用中,有时程序所要实现功能比较复杂,代码量也很大。若把所有的代码都存储在一个文件中,则不利于代码的复用和维护。一种更好的方式是将实现不同功能的代码分拆到多个文件中分别进行存储,这样使得结构更加清晰,更易于维护。为了实现这些需求,Python将一系列相关的代码组织在一起存储在一个文件中,这就是 模块(module)。最常见的模块是以.py“为后缀的文件(即用Python编写的代码文件),文件名就是模块名。当然模块还有一些其他的形式,例如”.so"文件、“.dll” 文件等,但初学者几乎接触不到。

2024-01-10 16:40:07 155

转载 【Python基础篇】Python中的七种数据类型

【转载】前导Python中的数据类型主要有:Number(数字)、Boolean(布尔)、String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典)、Set(集合)。其中又分为可变数据类型和不可变数据类型,可变数据类型是指可以随着函数的执行发生变化,而不可变数据类型不可以改变不可变数据类型(3个):Number(数字)、Boolean(布尔)、String(字符串)、Tuple(元组)

2024-01-07 16:04:39 133

转载 Python学习笔记(一)

可以将“作用域”看成是变量的容器。当作用域被销毁时,所有保存在该作用域内的变量的值就被丢弃了。如果程序终止,全局作用域就被销毁,它的所有变量就被丢弃了。否则,下次你运行程序的时候,这些变量就会记住它们上次运行时的值。局部和全局作用域:在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”。Python中调用方法时方法名字后面不带括号()调用的是这个方法本身,即整个方法体,是一个方法对象,不用等待方法的执行完成;而方法名字后面带了括号(),调用的是方法return的结果,需要等待方法执行完成的结果。

2024-01-07 15:40:26 53

转载 python变量名后加冒号“:“以及函数后面加箭头“->”的含义

->” 为函数标注,通常用于类型提示,是python3引入的用法。表示,value的类型为int,并返回值为bool类型。不会校验filepath的类型。在执行时会把a当作str来操作。,只是一种提示,并非强制,int 为a期待的类型。

2024-01-07 15:34:01 86

转载 Python元组(Tuple)详细使用教程

通过本文的介绍,你已经了解了元组的基本操作和常用技巧,包括创建元组、访问元素、元组的不可变性、元组的优点、元组的解包、元组的比较、遍历元组和元组操作等。它可以存储多个元素,并且与列表不同的是,元组是不可变的,即一旦创建就不能修改。本文将带你详细了解Python元组的基本操作和常用技巧,帮助你更好地理解和应用元组。可以使用元组的解包操作将元组中的元素分别赋值给多个变量。元组可以进行比较操作,比较的规则是从左到右逐个比较对应位置的元素。元组还支持一些常用的操作,如获取元组长度、查找元素索引等。

2024-01-07 15:29:30 45

转载 python中for in的用法

for in 说明:也是循环结构的一种,经常用于遍历字符串、列表,元组,字典等。可迭代对象:列表、元组、字典等都是可迭代对象,就是可以遍历的对象。执行流程:x依次表示y中的一个元素,遍历完所有元素循环结束。列表生成式:快速生成具有特定规律的列表。

2024-01-07 15:21:34 15

转载 Python海象运算符(:=)的三种用法

海象运算符由一个 : 和 一个 = 组成,即 :=。因为它看起来就是一个海象旋转 90° 而成,很像。海象运算符的英文原名叫 Assignment Expresions ,即。是Python 3.8新增的语法 :=,在 PEP 572 中提出。这是因为有三个数字满足列表推导式的条件,需要再额外计算。即一个变量名后跟一个表达式或者一个值,这个和赋值运算符。当然,海象运算符同样适合用于字典推导式和集合推导式。储存,不需要额外计算。类似,可以看作是一种新的赋值运算符。更优雅的实现方式:海象运算符。

2024-01-04 13:17:10 185

转载 python-不带冒号的“for 语句”

上面,应该有一个结束冒号 “ : ” 在“for 语句”之后,就像 i(3) 中的 i 一样。但是这一行没有在 range()。

2024-01-04 11:27:05 37

转载 Python自定义函数详解

参数是向函数内传递的值。一个函数可以有任意数量的参数,用逗号分隔。很多时候,你希望你的函数不仅仅是为用户打印输出,而是需要返回某些数据。除非在函数中使用 return,否则它不会返回任何值。下面示例,myabs()会返回值,赋值给m。下面示例,myabs()没有返回值,直接输出结果,m获取不到值。

2023-12-25 13:57:37 52

转载 详解 C++ 左值、右值、左值引用以及右值引用

区分左值和右值,终究还是要看能否取地址。左值引用只能引用左值,不能直接引用右值。但是const左值引用既可以引用左值,也可以引用右值。// 1.左值引用只能引用左值int t = 8;// 编译报错,因为10是右值,不能直接引用右值// 2.但是const左值引用既可以引用左值// 也可以引用右值问:为什么const左值引用也可以引用右值?答:在 C++11标准产生之前,是没有右值引用这个概念的,当时如果想要一个类型既能接收左值也能接收右值的话,需要用const左值引用。

2023-12-23 18:58:11 208

转载 Mordern C++之左值(引用)与右值(引用)

std::move 和 std::forward对比

2023-12-22 17:22:59 47

转载 C++标准库STL中的map和unordered_map不是线程安全,请问有没有线程安全的map?

C++标准库STL中的map和unordered_map不是线程安全,请问有没有线程安全的map? - 知乎

2023-12-17 16:02:47 78

转载 C++STL vector容器 基本概念 构造函数 赋值操作 容量和大小

———重新指定容器的长度为num,若容器变长,则以elem值填充新位置。————————————将[beg, end)区间中的数据拷贝赋值给本身。————————–判断容器是否为空,空返回true,不为空返回false。————————————-将n个elem拷贝赋值给本身。—————————构造函数将n个elem拷贝给本身。—————————–返回容器中元素的个数,capacity≥size。——————————采用模板实现类实现,默认构造函数。————————容器的容量,capacity≥size。

2023-12-17 15:28:10 55

转载 C++线程安全容器stack和queue的使用详细介绍

线程安全容器是可以支持在多个线程并发访问的STL容器。在多线程程序中使用线程安全容器可以保证数据操作的正确性和安全性。

2023-12-17 14:55:22 382

转载 多线程操作C++ STL vector出现概率coredump问题

重点关注frame 1, 其中有:_M_start, _M_finish, _M_end_of_storage, 熟悉vector底层动态分配的朋友, 应该能猜出这三个变量的含义, _M_start指向vector头, _M_finish指向vector尾, _M_end_of_storage指向预分配内存的尾。还有一个问题: 上面的结论是_M_finish越过了_M_end_of_storage, 导致coredump, 那如果让_M_end_of_storage不被越过呢?这种场景是非常普遍的。

2023-12-17 14:36:14 132

转载 关于C++ 多线程和并发编程问题的案例

原文链接:https://blog.csdn.net/weixin_59383576/article/details/133923034。版权声明:本文为CSDN博主「知孤云出岫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。这些案例涉及了竞态条件和死锁等多线程编程中常见的问题,通过合适的同步机制和锁的使用,可以避免或减轻这些问题的发生。问题描述:多个线程同时访问并修改共享资源,导致不可预测的结果。解决方法:使用互斥锁(std::mutex)保护共享资源。

2023-12-16 21:30:39 19

转载 C++多线程编程<一>之常见面试问题

3、全局区(静态区)(static)— 全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数名,局部变量的名等。线程的基本状态包括:新线程态、可运行态、阻塞 / 非运行态、死亡态。当访问资源量存在先后的顺序的时候使用同步,当需要独占试访问资源时使用互斥。第一题:线程的基本概念、线程的基本状态及状态之间的关系?第四题:多线程同步和互斥有几种实现方法,都是什么?

2023-12-16 21:00:06 576

转载 C++11多线程编程(互斥量和条件变量)

那么就会判断flag是否等于x,很显然如果是主线程先拿到锁此时flag=10,x=100不等,那么这个时候主线程就会执行wait(),也就是会被阻塞,然后因为wait()自身有这样一个机制(当他执行的时候会自动释放锁吗,也就是会自动执行unlock,给其他线程一个拿锁的机会),这个时候子线程就会拿到锁,并且判断fag是否等于x,这时候明显是相等的,那么就会进行下面的一系列循环,这个时候重点来了,一定要改变全局变量!2、然后问题来了,怎么控制子线程循环后主线程循环,然后一直这样依次循环呢?

2023-12-16 20:47:31 12

转载 C++ 接口类和抽象类

4、派生类必须实现抽象函数,在派生类中,基类的纯虚函数被实现后就变成虚函数,如果派生类没有实现基类的纯虚函数,那么派生类也是抽象类一个;1、C++ 语言中没有抽象类的概念,可通过纯虚函数来实现抽象类,定义了一个或多个纯虚函数的类称为抽象类;2、抽象类可以包括抽象函数,抽象函数指的是没有具体内容的函数,一般用"= 0"修饰;它在C++中用抽象类来实现,接口是一种特殊的抽象类;抽象类:数据+方法(一定包含虚方法n>=1)+部分方法的实现。类是对对象的抽象,抽象类是对类的抽象,而接口是对行为的抽象。

2023-06-18 10:32:52 224

转载 c++ 接口类特点和示例

转载于:https://www.cnblogs.com/first-semon/p/6957475.html。后,在声明接口类类对象调用虚函数时,怎么判断调用的是哪个子类的虚函数呢?接口类就是只提供接口不提供实现的类,就是接口类,接口类和。动态指定子类可以使用类模板,请关注后续。2017-06-07。对C++而言,没有什么区别。如果多个类同时继承基类,成为。上面又写了一个Dog类。

2023-06-18 10:30:22 287

转载 C/C++ 多线程编程

用户线程和内核线程的映射是M:1或者M:N的关系,而内核线程和硬件线程也存在映射关系,且内核或者说操作系统并不知道用户线程的存在,操作系统只知道内核线程的存在,关于用户线程向内核线程的调度是通过线程库去实现的,内核线程向硬件线程的调度是通过操作系统实现的,因为不管是用户线程映射到内核线程还是内核线程映射到硬件线程都不是1:1的关系,所以会存在 用户线程的上下文切换和内核线程的上下文切换,切换的对比上面已经说了。因为他是用到了超线程技术,我们知道CPU执行执行分为五个步骤,分别是。

2023-06-14 15:37:02 194

空空如也

空空如也

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

TA关注的人

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