
c++
文章平均质量分 83
c++程序
xiaoxiao涛
从头开始学习计算机技术!!!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
协程6 --- HOOK
修改符号指向我们可以通过HOOK系统的socket函数族来实现无需修改代码的异步化改造。原创 2024-11-07 21:05:13 · 999 阅读 · 0 评论 -
协程5 --- 栈切换
数组名 得到的是数组指针,数组指针的步长为整个数组的长度。看实现之前可以先看一下另一个博客特殊的栈溢出例子。用堆模拟栈的时候,堆栈的生长方向是相反的。为什么要设置成只有一个长度的数组?sizeof(数组名) 为数组长度。作为函数参数退化为指针。原创 2024-11-07 21:04:42 · 410 阅读 · 0 评论 -
协程4 --- 一个特殊的栈溢出例子
函数的地址复制到后面8个字符(编译成64位程序,指针大小为8Byte)。数组比temp数组长的后8位也被拷贝过去了,由于关闭了栈保护,把原来的。分析之前先普及一下几点知识。这边注意一下栈是往下生长的。有个长度位24的字符数组。,前面16个字符初始化。数组变量,结果字符串。原创 2024-11-07 21:04:11 · 368 阅读 · 0 评论 -
协程3 --- golang的协程调度
M在绑定有效的P后,进入一个调度循环,而调度循环的机制大致是从P的本地运行队列以及全局队列中获取G,切换到G的执行栈上并执行G的函数,调用goexit 做清理工作并回到M,如此反复。P的数量决定了系统内最大可并行的G的数量,P的数量受本机的CPU核数影响,可通过环境变量$GOMAXPROCS或在runtime.GOMAXPROCS()来设置,默认为CPU核心数。描述:1个用户线程对应1个内核线程,最容易实现,能够利用多核,一个线程被阻塞,不会阻塞其他线程,协程的调度都由操作系统完成。原创 2024-11-07 21:03:43 · 828 阅读 · 0 评论 -
协程2 --- 相关概念
有栈协程是真的给你开了一个栈(如golang),主流的无栈协程方案(例如C++,Rust等),是把一个协程函数编译成状态机的逻辑,然后用一块临时分配的堆内存去保存这个函数里的变量和协程状态机以及上下文等内容。GCC支持一种允许栈内存不连续的编译参数,实现原理是在每个函数调用开头都插入一段栈内存检测的代码,如果栈内存不够用了就申请一块新的内存,作为栈内存的延续。,所以依然存在几个边边角角的难点需要开发者注意:没有gc,TLS的问题,用户不按套路出牌、把逻辑代码run在协程之外,粗粒度的线程锁等等。原创 2024-11-07 21:03:07 · 742 阅读 · 0 评论 -
协程1 --- 发展历史
对要完成的任务进行分解,先对最高层次中的问题进行定义、设计、编程和测试,而将其中未解决的问题作为一个子任务放到下一层次中去解决。普通人大概率不能并行,却可以并发,你先左手画一笔,然后右手画一笔,同一时候只有一只手在操作,来回交替,直到完成两个图案,这就是并发,协程主要的功能。抢占式的线程可以解决大部分的问题,也就是说协程能干的线程干得也不错,线程干的不好的地方,使用者暂时也可以接受。协程和线程并非矛盾,协程的威力在于IO的处理,恰好这部分是线程的软肋,由对立转换为。原创 2024-11-07 21:02:28 · 1142 阅读 · 0 评论 -
c++11/14特性整理---汇总(线程)
auto 关键字for-each 循环右值及移动构造函数 + std::forward + std::move + stl 容器新增的 emplace_back() 方法std::thread 库、std::chrono 库智能指针系列(std::shared_ptr/std::unique_ptr/std::weak_ptr),智能指针的实现原理一定要知道,最好是自己实现过线程库 std::thread + 线程同步技术库 std::mutex/std::condition_variable/std::l原创 2021-07-29 10:21:05 · 1444 阅读 · 0 评论 -
c++11/14新特性---函数语法
如果能够使用临时对象已经申请的资源,既能节省资源,还能节省资源申请和释放的时间,如果要执行这样的操作就需要使用右值引用了,右值引用具有移动语义,移动语义可以将资源(堆、系统对象等)通过浅拷贝从一个对象转移到另一个对象这样就能减少不必要的临时对象的创建、拷贝以及销毁,可以大幅提高 C++ 应用程序的性能。通过测试代码可以看出,在子类中初始化从基类继承的类成员,需要在子类中重新定义和基类一致的构造函数,这是非常繁琐的,C++11 中通过添加继承构造函数这个新特性完美的解决了这个问题,使得代码更加精简。原创 2024-10-22 10:12:31 · 1122 阅读 · 0 评论 -
c++11/14新特性---关键字
google的c++规范中提到explicit的优点是可以避免不合时宜的类型变换,缺点无。为了实现运行时检测,编译器创建额外的代码,然而这会妨碍程序优化。用关键字using作为别名的开始,其后紧跟别名和等号,其作用是把等号左侧的名字规定成等号右侧类型的别名。常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式,是由它的数据类型和初始值共同决定的。选择并返回操作数的数据类型。在此过程中,编译器分析表达式并得到它的类型,却不实际计算表达式的值。将返回参数包中元素的数量,结果是一个编译时常量,类型为。原创 2024-10-22 10:11:35 · 1050 阅读 · 0 评论 -
c++11/14新特性---智能指针
结果一个对象会被析构了两次,在这个例子中使用同一个指针 this 构造了两个智能指针对象 sp1 和 sp2,这二者之间是没有任何关系的,因为 sp2 并不是通过 sp1 初始化得到的实例对象。智能指针主要用于管理在堆上分配的内存,它将普通的指针封装为一个栈对象。counter对象的目地就是用来申请一个块内存来存引用基数,s是share_ptr的引用计数,w是weak_ptr的引用计数,当w为0时,删除Counter对象。进行初始化时不能将一个普通指针直接赋值给智能指针,因为一个是指针,一个是类。原创 2024-10-22 10:12:54 · 993 阅读 · 0 评论 -
MyTinySTL阅读笔记---概述
文章目录简介分配器c++中的new和deletenew operatoroperator newplacement new实际测试deleteSTL分配器一级配置器二级配置器一级二级配置器统一的接口内存池实现MyTinySTL分配器allocatorconstructdestroy内存池实现allocatedeallocatereallocate迭代器概述类型traits萃取指针行为反向迭代器 r...原创 2021-11-08 15:56:43 · 5869 阅读 · 1 评论 -
MyTinySTL阅读笔记---容器
容器概述分类:序列容器关联容器序列式容器vector动态增长数组关联式容器原创 2021-11-08 15:54:29 · 1885 阅读 · 2 评论 -
MyTinySTL阅读笔记---算法
算法原创 2021-10-29 17:03:40 · 1091 阅读 · 0 评论 -
MyTinySTL阅读笔记---仿函数和配接器
仿函数所谓仿函数也就是函数对象, 以前是这样称呼它的, 只是一直沿用至今了。仿函数就是一种具有函数特质的对象.。可以将部分操作由用户自己来定义然后传入自定义的函数名就可以被调用。根据参数个数分类一元仿函数一元仿函数基类:template <class Arg, class Result>struct unary_function { typedef Arg argument_type; // 参数类型别名 typedef Result result_type; //原创 2021-10-29 17:02:57 · 549 阅读 · 2 评论 -
MyTinySTL阅读笔记---迭代器
迭代器概述迭代器提供一种方法使它能够依顺序访问聚合物(容器)所含的各个元素,而又无需暴露改聚合物的内部表述方式。迭代器可被用来访问一个容器类的所包函的全部元素,其行为像一个指针(对operator *和operator->进行重载)。设计算法时,如果可能,尽量针对某种特定迭代器提供一个明确定义,并针对更强化的某种迭代器提供另一种定义,这样能在不同情况下提供最大效率。class与typename的区别typename和class在作为参数类型时用法一样, 没有区别typename主要用原创 2021-10-28 17:49:20 · 1912 阅读 · 12 评论 -
MyTinySTL阅读笔记---分配器
分配器c++中的new和delete1、new operatornew operator就是new操作符,平时使用的new(如int *pt = new object(...);)主要完成两个工作:分配足够的内存以便容纳所需类型的对象(operator new)调用构造函数初始化内存中的对象(placement new)2、operator newnew操作符为分配内存所调用函数的名字是operator new,就是间接性的调用了 malloc函数。源码:void* __CRTDECL原创 2021-10-28 17:47:51 · 1592 阅读 · 2 评论 -
ubuntu jsoncpp 1.9.5 编译使用
目录下载编译拷贝头文件和库文件测试代码下载jsoncpp 1.9.5 好像不支持scons编译了,使用cmake编译原始仓库: https://github.com/open-source-parsers/jsoncppgitee仓库:https://gitee.com/mirrors/jsoncpp/tree/master选择版本下载编译搞到linux上解压执行cmake CMakeLists.txt,发现了编译攻略:按照上面的操作:创建目录:注:这边cp的文件是重新解压缩的,原创 2022-04-29 17:56:20 · 1367 阅读 · 7 评论 -
win32 纸牌
实现效果具体实现牌分为三个部分,鼠标可以拿起若干牌,可以拖动,按照一定规则放置到其他位置,当所有的牌都放在上方时游戏就赢了。牌的随机排列使用random_shuffle乱序之后,把m_vtr当做索引就行了。CCardCtrl::CCardCtrl(): m_vtr(52){ 。。。 for (int i = 0; i < 52; i++) { m_vtr[i] = i; } srand((unsigned int)time(NULL)); random_shuffle(原创 2021-07-19 11:40:13 · 263 阅读 · 0 评论 -
qt飞鸽传书
文章目录项目要求运行截图代码链接项目要求服务器运行在linux(只有数据转发功能),客户端使用qt局域网文件传输(断点续传)和聊天运行截图运行服务器客户端连接服务器登陆新用户加入新加入的客户端获取在线成员群聊私聊发送文件断点续传代码链接链接:https://pan.baidu.com/s/1nnPc0cc8pIaCxOYVCp2lNg提取码:l183...原创 2021-01-26 18:33:06 · 5143 阅读 · 5 评论 -
内存管理
文章目录内存碎片避免内存碎片的产生内存池MemoryBlock分配器MemoryAlloctor申请内存池申请内存释放内存MemoryMgr单例模式内存池映射数组内存块的引用计数申请内存释放内存测试代码对象池对象池基类对象描述信息初始化对象池申请对象内存释放对象内存测试代码避免内存泄露智能指针auto_ptrshared_ptrweak_ptrunique_ptr总结内存碎片我们先来看看内存碎片是什么,是如何产生的。假如我们系统只有20个连续字节给我们使用,执行以下代码:void *p1 = mal原创 2021-01-21 14:27:11 · 242 阅读 · 0 评论 -
easyx官网例子初试
目录透明贴图和三元光栅操作精确延时烟花水波透明贴图和三元光栅操作当我们想在窗口上显示一个人物的时候,我们当然是希望让他融入到背景中去,这个时候我们就要用到透明贴图或三元光栅操作了。文章链接https://codeabc.cn/yangw/post/transparent-putimage除了文章里面的方法,常用的方法还有XOR 运算,它有一个重要的特性:(a ^ b) ^ b = a。假...原创 2019-09-24 15:55:12 · 4817 阅读 · 0 评论 -
win32 数字雨
效果代码main.cpp#include <windows.h>#include <time.h>#include <vector>#include "rain.h"#define MY_TIMER_ID 123 // 计时器ID#define MY_TIMER_TIME 100 // 计时器间隔时间LRESU...原创 2019-09-05 02:08:49 · 716 阅读 · 0 评论 -
基于QT的智能饮料机终端库存监控系统(qt5.9.2 mingw53_32 + win10 + SeetaFaceEngine + opencv3.3)
项目实现欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown...原创 2019-06-05 16:43:35 · 3662 阅读 · 8 评论