- 博客(21)
- 资源 (2)
- 收藏
- 关注
原创 C++协程
协程就是一段可以挂起(suspend)和恢复(resume)的程序,一般而言,就是一个支持挂起和恢复的函数。函数挂起:函数执行到某个位置后,可以停止执行当前函数,并将控制权转移给其他函数(注意,此处的转移不是return,会记录当前函数的状态(协程状态coroutine state),如输入参数,使用到的变量(变量是值拷贝还是引用或指针,引用和指针需要程序员确保变量的生命周期),控制权转移的位置等)。函数恢复:再次进入到该函数时,查询函数的执行状态,从上一次转移的位置继续执行。
2024-06-16 20:29:26
377
原创 std::async异步变同步的原因
未存储对象std::async的默认行为是当对象销毁时阻塞主线程,直到异步任务完成。存储对象:可以显式地控制等待异步任务完成的时机。
2024-06-06 21:13:59
181
原创 C++高性能编程---04.数据结构
容器适配器表示可以由序列式容器实现的抽象数据结构(stack、queue、priority_queue)
2024-04-14 20:41:30
251
1
原创 C++高性能编程---03.C++分析和度量性能
1.渐进复杂度和大O符号大O表示法 均摊时间复杂度分析2.度量什么?该如何度量定义目标:(优化目标,延迟/响应时间、吞吐量、内存使用、IO绑定或CPU绑定:性能与IO有关还是与CPU有关、耗电量、数据聚合) 度量 找到瓶颈 做有根据的猜测 优化 评估 重构3.了解代码和热点插桩型剖析器 采样型剖析器4.微基准测试(Google Benchmark https://github.com/google/benchmark)优先使用剖析器找到需要调整的热点 将之与其他代码分
2024-04-08 12:00:00
218
1
原创 C++高性能编程---01.C++概述
C++是一种高度可移植的编程语言,具有零成本抽象的能力,使开发者能够编写和管理大型、表达力强且健壮的代码库。
2024-04-07 08:30:00
293
1
原创 Effective C++学习---09.杂项讨论
条款53:不要轻易忽视编译器的警告严肃对待编译器发出的警告信息,确保对警告信息有深刻的理解后,可以选择忽略某些警告信息(确保充分了解引起警告的原因,以及对应的影响) 不要过度依赖编译器的报警能力,因为不同的编译器对待事情的态度并不相同条款54:让自己熟悉包括TR1在内的标准程序库(std::experimental中的实验功能)条款55:让自己熟悉Boost
2024-04-06 14:51:01
161
1
原创 Effective C++学习---08.定制new和delete
条款49:了解new-handler的行为set_new_handle允许客户指定一个函数(new-handler),在内存分配无法满足时被调用,只有当new_handler==nullptr时,operator new才会抛出异常 nothrow new是一个颇为局限的工具,只能保持new操作不抛出异常,但无法保证后续类的构造函数不抛出异常条款50:了解new和delete的合理替换时机用来检测运用上的错误(用户可以添加一些自己的机制,检测内存使用或释放上的错误) 为了强化效能 为了收集使
2024-04-06 11:05:36
264
1
原创 Effective C++学习---07.模板与泛型编程
在template实参推导过程中从不将隐式类型转换函数(通过构造函数发生的隐式转换)纳入考虑当编写一个类模板时,某些函数与typename相关,当这些函数的参数涉及隐式类型转换时,最好将该函数定义为类模板内的friend函数。
2024-04-06 08:00:00
299
1
原创 Effective C++学习---06.继承与面向对象设计
静态绑定:在编译期确定动态绑定:在运行期确定对于继承而言,非虚函数不允许重新定义,因此本条款主要描述的是虚函数,对于虚函数而言,其是动态绑定的,而缺省参数值是静态绑定的。也就导致如果通过父类的指针或引用调用虚函数,实际调用的是子类的虚函数,但是参数值却是父类的缺省值而不是子类的缺省值条款38:通过复合塑模出has-a或“根据某物实现出”(is-implemented-in-terms-of)
2024-04-05 15:34:26
373
1
原创 Effective C++学习---04.设计与声明
理想上,如果客户企图使用某个接口而却没有获得他所预期的行为,这个代码不该通过编译;如果代码通过了编译,它的行为就该是客户所想要的。
2024-04-04 17:09:57
629
1
原创 无锁环形缓冲区(ring buffer)--单生产者单消费者场景
无锁环形缓冲区是一种多线程环境下用于在单生产者和单消费者之间安全传递数据的数据结构,它通常使用原子操作来保证线程安全性,而不需要使用显式的锁。这种数据结构通常用于提高多线程程序的性能,因为无锁操作比锁操作具有更低的开销。
2024-04-03 17:54:27
1008
1
原创 Effective C++学习---03.资源管理
资源:进程从操作系统申请,并要在合适的时机返还给操作系统,否则就会导致资源泄露;常见的资源有:堆内存(手动申请,使用结束后释放),文件描述符,互斥锁,网络socket等。
2024-04-03 11:18:01
1068
1
原创 Effective C++学习---01.让自己习惯C++
将C++视为一个由相关语言(次语言)组成的联邦,而非单一语言面向过程编程面向对象编程面向泛型编程STL:标准库对于内置的数据类型(C-like),pass-by-value(传值)通常比pass-by-reference(传引用)高效,对于Object-Oriented C++用户自定义(user-defined)数据类型,pass-by-reference(传引用)通常比pass-by-value(传值)高效。
2024-04-02 19:41:54
687
1
原创 数据结构与算法--如何使用堆模拟栈实现快速排序
快速排序是一种常用的排序算法,它通过选择一个基准元素,将数组分割成小于基准的部分和大于基准的部分,然后递归地对这两部分进行排序。因此快速排序的递归函数实现,就是将一个无序数组划分为小于基准的部分,基准元素,大于基准的部分,然后递归的对小于基准的部分和大于基准的部分进行重复调用递归函数。输出:将输入的序列划分为三部分,小于基准的部分,基准元素,大于基准的部分。得到的小于基准的部分和大于基准的部分要压入栈中。函数重复的从堆中弹出和压入元素,无须递归的进行函数调用,直到栈为空的时候,表示排序完成。
2023-08-20 21:23:10
136
1
原创 VS2019中创建OpenDDS项目
VS2019中创建OpenDDS项目1.新建VS项目2.添加编译头文件目录和编译需要的动态库1.添加头文件目录2. 添加动态链接库所需要的相关文件3.添加C++编程文件1.编译IDL文件2.将idl文件所在目录添加到项目头文件包含目录中3.编写OpenDDS数据发布者4.编写OpenDDS数据订阅者4测试运行1.新建VS项目项目名称自己命名即可,此处注意release/debug,32/64要与OpenDDS编译版本一致2.添加编译头文件目录和编译需要的动态库1.添加头文件目录打开项目属性性,
2021-04-19 17:15:46
782
3
原创 OpenDDS
OpenDDS Windows10安装步骤1.OpenDDS相关文件下载2.安装perl3.OpenDDS安装安装版本系统环境:Windows10Microsoft Visual Studio版本:vs2019perl版本:ActivePerl-5.28DDS版本:OpenDDS-3.14TAO版本:2.2aACE版本:6.2a_p171.OpenDDS相关文件下载相关文件已上传,正在审核,也可以直接到官网下载;所需文件:1.perl2.tao,ace3.opendds3.142
2021-04-19 16:47:17
344
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人