- 博客(129)
- 收藏
- 关注
原创 C++ std:: shared_ptr, std::unique_ptr 智能指针
https://www.cnblogs.com/keye/p/17901921.html
2024-07-27 10:07:47 574
原创 C++ 关于std::vector 的拷贝和赋值
包含std::vector 的结构体直接赋值是可以的,不存在浅拷贝的问题。vector 调用赋值运算符时候,新的vector 会重新申请一块堆内存来存放元素数据,原来的vector 的堆内存释放或者修改不会对新的vector 有影响。对象中的对象会指向同一个内存地址,这可能会导致问题,如违反对象唯一性原则、指针悬挂等。为了解决浅拷贝的问题,你需要进行深拷贝。包含指针或其他需要深度拷贝的对象,则在拷贝后和原始。有自己的拷贝构造函数进行深拷贝,可以直接使用。时,实际上发生的是浅拷贝,即只拷贝了。
2024-07-27 09:50:51 1168
转载 inline在c++中的作用
内联函数并不是一个增强性能的灵丹妙药。只有当函数非常短小的时候它才能得到我们想要的效果。但是,如果函数并不是很短而且很多地方被调用的话,那么将会使得可执行程序体积增大。所以。
2024-06-14 13:44:06 158
转载 局部变量是线程安全的,原因是什么?
局部变量的线程安全性原因是因为每个线程都有自己独立的线程栈空间,不同线程之间不会共享局部变量。需要注意多线程同时访问同一个引用类型的局部变量时可能出现的线程竞争问题,需要加锁保证线程安全。作者:Lion Long链接:https://www.zhihu.com/question/601406551/answer/3033562577来源:知乎。
2024-06-02 09:29:54 214 1
转载 C++11 POD 类型
一个对象既是普通类型(Trivial Type)又是标准布局类型(Standard-layout Type)那么这个对象就是POD类型。为什么我们需要 POD 类型满足这些条件呢,POD 类型在源码层级的操作上兼容于 ANSI C。POD 对象与 C 语言中的对象具有一些共同的特性,包括初始化、复制、内存布局与寻址:(1)可以使用字节赋值,比如用 memset、memcpy 对 POD 类型进行赋值操作;(2)对 C 内存布局兼容,POD 类型的数据可以使用 C 函数进行操作且总是安全的;
2024-06-02 09:13:27 92
转载 C++ 关于override关键字使用详解
因此,只要函数签名相同,派生类的函数就可以覆盖基类的函数,无论这两个函数的实现是否相同。这就是前面所说的,普通虚函数同时继承接口和缺省实现是危险的,最好是基类中实现缺省行为 (behavior),但只有在派生类要求时才提供该缺省行为.一种方法是 纯虚函数 + 缺省实现,因为是纯虚函数,所以只有接口被继承,其缺省的实现不会被继承。这是因为非虚函数是 “静态绑定” 的,p1被声明的是 Person* 类型的指针,则通过 p1调用的非虚函数都是基类中的,既使 指向的是派生类。
2024-05-31 18:06:20 8266 2
转载 windows下python开发环境的搭建 python入门系列 【环境搭建篇】
在正式学习Python之前要先搭建Python开发环境。由于Python是跨平台的,所以可以在多个操作系统上进行编程。
2024-05-25 17:33:12 61
转载 为什么局部变量是线程安全的?
例如,在Java 5.0之前,Integer.toString()方法使用ThreadLocal对象来保存一个12字节大小的缓冲区,用于对结果进行格式化,而不是使用共享的静态缓冲区(需要使用加锁机制)或者每次调用时都分配一个新的缓冲区。当调用fibonacci(a)时,CPU要先找到方法fibonacci()的地址(在CPU堆栈寄存器中),然后跳转到这个地址去执行代码(蓝色线),最后CPU执行完方法,再返回原来调用方法的下一条语句(红色线)。即,栈帧和方法同生共死。方法A中调用方法B,方法B中调用方法C。
2024-04-30 16:48:40 51
原创 使用std::copy_n 对std::vector 拷贝数据时需要注意
关于第二个参数size,需要注意,这个iterator 所指向的容器的元素个数,比如这里是std::vector,std::array 等,这里需要调用的是size()这个接口,返回的是元素个数,而不是多少个Byte.关于第一和第三个参数,这里需要注意是用的iterator。
2024-04-30 15:38:31 740
原创 github Copilot的使用总结
在编写check_vector_value接口的时候,你在接口内输入if,会自动看到提示建议的代码,当前这个代码大部分可能不能完全符合你的需求,但是可能会有一定借鉴意义。Ctrl + . 或 Cmd + .(Mac): 打开建议框,显示更多关于建议的选项,如查看更多建议、查看文档等。Ctrl + Space 或 Cmd + Space(Mac): 打开建议框,显示Copilot的建议列表。Tab 键: 接受当前选中的建议,将其插入到代码中。3. 可以找出重复代码,并删除重复代码,重写代码。
2024-04-24 17:04:46 1552
转载 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 119
转载 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 299
原创 关于strtok 函数的说明
头文件:函数strtok在中。str:要分割的字符串delim:用于分割的字符集合strtok函数原理与使用方法:第一次调用:strtok(char *s,char *delim),其中字符串delim是分隔识别符,在s中寻找首次出现在delim中的字符,把该字符替换为\0。如果找不到,不对原字符串进行改变。第二次调用:把第一个参数设为NULL,第二个参数含义不变。返回值:每次的返回值返回分隔后的下一个字符串的首地址。注意,分隔完成后原字符串已经被被改变了。
2024-04-03 15:42:40 1360
转载 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 459
转载 多核编程之 CPU Cache
该缓存行只被缓存在该CPU的缓存中,并且是被修改过的(dirty),即与主存中的数据不一致,该缓存行中的内存需要在未来的某个时间点(允许其它CPU读取请主存中相应内存之前)写回(write back)主存。CPU 架构下,一致性的保证就比较复杂,比如多个 CPU Cache 都缓存了某个变量的值,但那个变量被其中一个核修改了值,其他 CPU 核心内的缓存如何能及时感知并刷新缓存?该状态意味着该缓存行可能被多个CPU缓存,并且各个缓存中的数据与主存数据一致(clean),当有一个CPU修改该缓存行中,
2024-03-31 11:47:09 115
转载 C++ Perf性能调优+火焰图调优
系统级性能优化通常包括两个阶段:性能剖析(performance profiling)和代码优化。性能剖析的目标是寻找性能瓶颈,查找引发性能问题的原因及热点代码。代码优化的目标是针对具体性能问题而优化代码或编译选项,以改善软件性能。
2024-03-31 11:30:07 403
转载 C++20中的span容器
span 是 C++20 中引入的一个新的标准容器,它用于表示连续的一段内存区间,类似于一个轻量级的只读数组容器。span 是一个轻量级的非拥有式容器,它提供了对连续内存的引用。span 的主要用途是作为函数参数,可以避免不必要的内存拷贝,并且可以防止悬垂指针和空指针引用的问题。它的定义在头文件 <span> 中,并位于 std 命名空间中。span 包含了一个指向连续内存区域的指针以及它所占用的大小,可以通过它来访问这个内存区域中的元素。
2024-03-24 10:49:59 610
转载 性能调优之工具---perf
Perf 是内置于Linux 内核源码树中的性能剖析(profiling)工具。它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析。可用于性能瓶颈的查找与热点代码的定位。linux2.6及后续版本都自带该工具,几乎能够处理所有与性能相关的事件。
2024-03-23 22:06:26 319
转载 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 2002
转载 ARM PMU详解及使用
PMU即性能监视器,本文只对ARM架构的PMU进行阐述,它运行时可以收集关于处理器和内存的各种统计信息。对于处理器来说这些统计信息中的事件非常有用,你可以利用它们来调试或者剖析代码,很明显这东西是用来测量性能与调优的。之前有段时间在做性能的优化,它是一种硬件实现的机制,因此测量的结果也是比较可信的。
2024-03-23 20:49:53 790
转载 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 793
原创 Splitting data and data conversion(Python)
【代码】Splitting data and data conversion(Python)
2024-03-10 15:28:51 378
原创 ODP(Open Data Plane)
3. ODP API 规范ODP由三个各自独立又相关联的组件组成。首先,ODP是一个抽象的API规范,用于描述数据面应用程序的功能模型。该规范涵盖了许多常见数据面应用程序的编程需求,如接收、操作、传输数据包,但是并不要求这些功能具体如何实现。这是非常有意义的,正因为ODP API没有一个优选实施例,它们允许在支持ODP实现的各种平台上运行ODP,并进行各种创新开发。为了实现这一目标,ODP API使用了抽象数据类型描述,其定义留给ODP的实现者。例如,ODP数据包由类型为。
2024-03-10 15:21:35 1360
转载 进程,线程与多核,多cpu之间的关系
周而复始,一直这样执行下去。cpu的根本任务,就是执行指令,对计算机来说,都是0,1组成的序列,cpu从逻辑上可以划分为3个模块:控制单元、运算单元和存储单元。),速度最快,每个核上都有一个 L1 缓存,L1 缓存每个核上其实有两个 L1 缓存, 一个用于存数据的 L1d Cache(Data Cache),一个用于存指令的 L1i Cache(Instruction Cache)。包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;
2024-03-10 11:03:55 367
转载 Python中import语句用法详解
在实际应用中,有时程序所要实现功能比较复杂,代码量也很大。若把所有的代码都存储在一个文件中,则不利于代码的复用和维护。一种更好的方式是将实现不同功能的代码分拆到多个文件中分别进行存储,这样使得结构更加清晰,更易于维护。为了实现这些需求,Python将一系列相关的代码组织在一起存储在一个文件中,这就是 模块(module)。最常见的模块是以.py“为后缀的文件(即用Python编写的代码文件),文件名就是模块名。当然模块还有一些其他的形式,例如”.so"文件、“.dll” 文件等,但初学者几乎接触不到。
2024-01-10 16:40:07 1910
转载 【Python基础篇】Python中的七种数据类型
【转载】前导Python中的数据类型主要有:Number(数字)、Boolean(布尔)、String(字符串)、List(列表)、Tuple(元组)、Dictionary(字典)、Set(集合)。其中又分为可变数据类型和不可变数据类型,可变数据类型是指可以随着函数的执行发生变化,而不可变数据类型不可以改变不可变数据类型(3个):Number(数字)、Boolean(布尔)、String(字符串)、Tuple(元组)
2024-01-07 16:04:39 622
转载 Python学习笔记(一)
可以将“作用域”看成是变量的容器。当作用域被销毁时,所有保存在该作用域内的变量的值就被丢弃了。如果程序终止,全局作用域就被销毁,它的所有变量就被丢弃了。否则,下次你运行程序的时候,这些变量就会记住它们上次运行时的值。局部和全局作用域:在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”。Python中调用方法时方法名字后面不带括号()调用的是这个方法本身,即整个方法体,是一个方法对象,不用等待方法的执行完成;而方法名字后面带了括号(),调用的是方法return的结果,需要等待方法执行完成的结果。
2024-01-07 15:40:26 76
转载 python变量名后加冒号“:“以及函数后面加箭头“->”的含义
->” 为函数标注,通常用于类型提示,是python3引入的用法。表示,value的类型为int,并返回值为bool类型。不会校验filepath的类型。在执行时会把a当作str来操作。,只是一种提示,并非强制,int 为a期待的类型。
2024-01-07 15:34:01 139
转载 Python元组(Tuple)详细使用教程
通过本文的介绍,你已经了解了元组的基本操作和常用技巧,包括创建元组、访问元素、元组的不可变性、元组的优点、元组的解包、元组的比较、遍历元组和元组操作等。它可以存储多个元素,并且与列表不同的是,元组是不可变的,即一旦创建就不能修改。本文将带你详细了解Python元组的基本操作和常用技巧,帮助你更好地理解和应用元组。可以使用元组的解包操作将元组中的元素分别赋值给多个变量。元组可以进行比较操作,比较的规则是从左到右逐个比较对应位置的元素。元组还支持一些常用的操作,如获取元组长度、查找元素索引等。
2024-01-07 15:29:30 202
转载 python中for in的用法
for in 说明:也是循环结构的一种,经常用于遍历字符串、列表,元组,字典等。可迭代对象:列表、元组、字典等都是可迭代对象,就是可以遍历的对象。执行流程:x依次表示y中的一个元素,遍历完所有元素循环结束。列表生成式:快速生成具有特定规律的列表。
2024-01-07 15:21:34 58
转载 Python海象运算符(:=)的三种用法
海象运算符由一个 : 和 一个 = 组成,即 :=。因为它看起来就是一个海象旋转 90° 而成,很像。海象运算符的英文原名叫 Assignment Expresions ,即。是Python 3.8新增的语法 :=,在 PEP 572 中提出。这是因为有三个数字满足列表推导式的条件,需要再额外计算。即一个变量名后跟一个表达式或者一个值,这个和赋值运算符。当然,海象运算符同样适合用于字典推导式和集合推导式。储存,不需要额外计算。类似,可以看作是一种新的赋值运算符。更优雅的实现方式:海象运算符。
2024-01-04 13:17:10 776
转载 python-不带冒号的“for 语句”
上面,应该有一个结束冒号 “ : ” 在“for 语句”之后,就像 i(3) 中的 i 一样。但是这一行没有在 range()。
2024-01-04 11:27:05 113
转载 Python自定义函数详解
参数是向函数内传递的值。一个函数可以有任意数量的参数,用逗号分隔。很多时候,你希望你的函数不仅仅是为用户打印输出,而是需要返回某些数据。除非在函数中使用 return,否则它不会返回任何值。下面示例,myabs()会返回值,赋值给m。下面示例,myabs()没有返回值,直接输出结果,m获取不到值。
2023-12-25 13:57:37 125
转载 详解 C++ 左值、右值、左值引用以及右值引用
区分左值和右值,终究还是要看能否取地址。左值引用只能引用左值,不能直接引用右值。但是const左值引用既可以引用左值,也可以引用右值。// 1.左值引用只能引用左值int t = 8;// 编译报错,因为10是右值,不能直接引用右值// 2.但是const左值引用既可以引用左值// 也可以引用右值问:为什么const左值引用也可以引用右值?答:在 C++11标准产生之前,是没有右值引用这个概念的,当时如果想要一个类型既能接收左值也能接收右值的话,需要用const左值引用。
2023-12-23 18:58:11 554
转载 C++标准库STL中的map和unordered_map不是线程安全,请问有没有线程安全的map?
C++标准库STL中的map和unordered_map不是线程安全,请问有没有线程安全的map? - 知乎
2023-12-17 16:02:47 236
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人