
C/C++
文章平均质量分 88
C/C++方面的学习记录
河边小咸鱼
咸鱼码农
展开
-
redis学习记录:字典(dict)源码分析
redis字典(dict)部分源码分析。原创 2022-06-03 22:03:23 · 931 阅读 · 4 评论 -
C++学习记录:一个协程库的源码分析
抽空学习一些感兴趣的源码,这次学习云风大佬的一个协程库源码。项目地址:https://github.com/cloudwu/coroutine个人fork注释后的项目地址:https://github.com/zgg2001/coroutine目录一、前言二、实现分析1. 数据结构2. 整体思路3. 唤醒 resume4. 挂起 yield三、小结一、前言 本来是想学习一下鹅厂的 libco 协程库来着,无奈之前没怎么接触过协程的实现,且 libco 源码太厚实了,啃起来太慢,所以打算先学习.原创 2022-03-19 20:25:45 · 1330 阅读 · 0 评论 -
C++学习记录:一个小线程池的源码分析
抽空学习一些感兴趣的源码,这次学习一个小而美的C++11线程池源码。项目地址:https://github.com/progschj/ThreadPool/目录一、源码一览二、源码分析1. 构造部分2. 析构部分3. 任务入队部分三、小结一、源码一览 核心代码很简单,就是下面这不到一百行。但是其中使用了很多新C++11的新东西,写的非常优雅,有很多可以学习的地方。#ifndef THREAD_POOL_H#define THREAD_POOL_H#include <vector&.原创 2022-03-14 20:28:26 · 1468 阅读 · 0 评论 -
C++20学习记录:modules 和 <=>
本篇笔记记录了对于 C++20 新特性中模块和三路比较运算符的一些尝试。主要参考地址:cppreference目录一、前言二、模块1. 概念2. 代码测试3. 小结三、三路比较运算符1. 概念2. 代码测试3. 小结一、前言 这次抽空对 C++20 的新特性进行一点尝试,首先目标定为我比较感兴趣的模块部分和一个新的运算符 <=>。 我的环境上的 gcc 版本为 8.4.1,我查了一下编译器支持,发现这个版本对于 C++20 的好多新特性无法完全支持,所以首先是手动编译安装了一下.原创 2022-01-23 21:49:38 · 1872 阅读 · 0 评论 -
C++17学习记录:新语言功能特性
本篇笔记汇总了C++17中的主要新语言功能特性,根据个人理解与查阅的资料进行记录。主要参考地址:cppreferenceC++17为继C++11后的第一个大版本更新,东西相较于C++14多了不少,但是基本上都是以往特性的优化与补充,这里简单进行一些主要新特性的记录。目录· 折叠表达式· 类模板实参推导· auto 占位的非类型模板形参· 编译期的 constexpr if 语句· inline 变量· 结构化绑定· if 和 switch 语句中的初始化器· u8-char· 命名空间相关· 将 .原创 2022-01-21 20:00:56 · 994 阅读 · 0 评论 -
C++14学习记录:新语言功能特性
本篇笔记汇总了C++14中的主要新语言功能特性,根据个人理解与查阅的资料进行记录。主要参考地址:cppreferenceC++14主要是在C++11标准之上的一些补充,所以相对的内容较少一些。目录· 变量模板· 泛型 lambda· lambda 初始化捕获· new/delete 消除· constexpr 函数上放松的限制· 二进制字面量· 数位分隔符· 函数的返回类型推导· 带默认成员初始化器的聚合类。· 变量模板 在之前的版本中,模板均为函数模板或者类模板,而从C++14起,变量也可.原创 2021-12-08 23:44:20 · 1214 阅读 · 0 评论 -
C++11学习记录:核心语言功能特性
本篇笔记汇总了C++11中的主要新特性。参考地址:cppreference目录· auto 与 decltype· 预置与弃置的函数· final 与 override· 尾随返回类型· 右值引用· 移动构造函数与移动赋值运算符· 有作用域枚举· constexpr 与字面类型· 列表初始化· 委托与继承的构造函数· 花括号或等号初始化器· nullptr· long long· char16_t 与 char32_t· 类型别名· 变参数模板· 推广的(非平凡)联合体· 推广的 POD (平凡类型.原创 2021-12-02 00:00:02 · 1951 阅读 · 0 评论 -
dpdk源码分析:交互式命令行的实现(二) 初始化与退出
本文中使用的dpdk库版本为:16.04此文为分析的第二篇,接上文 dpdk源码分析:交互式命令行的实现(一) 命令添加上一篇中已经分析了命令添加相关的实现和写法,接下来目标为交互式命令行初始化和退出相关内容的分析。目录一、从一段代码入手二、初始化函数 cmdline_stdin_new()1. 终端设置2. cmdline_new()2.1 rdline_init()2.1.1 cmdline_write_char()2.1.2 cmdline_valid_buffer()2.1.3 cm.原创 2021-11-21 13:04:51 · 1245 阅读 · 0 评论 -
C/C++学习记录:智能指针 std::unique_ptr 源码分析
抽空扣一点感兴趣的标准库源码,这里总结一下 std::unique_ptr 相关的分析本文中 gcc version: 8.4.1 20200928 (Red Hat 8.4.1-1) (GCC)libstdc++:libstdc++-8.4.1-1.el8.x86_64其中c++库安装路径为 /usr/include/c++/8目录一、前言二、源码分析1. 从 class unique_ptr 入手2. 储存类 class __uniq_ptr_impl3. 默认删除器 struct defa.原创 2021-11-02 23:24:08 · 1994 阅读 · 2 评论 -
C/C++学习记录:std::forward 源码分析 / 完美转发的作用
抽空扣一点感兴趣的标准库源码,这里总结一下 std::forward() 相关的分析本文中 gcc version: 8.4.1 20200928 (Red Hat 8.4.1-1) (GCC)其中c++库安装路径为 /usr/include/c++/8目录一、前言二、源码与分析1. std::forward 源码总览2. std::forward 分析三、完美转发四、总结一、前言 本文是基于前文 C/C++学习记录:std::move 源码分析 进行的。前文中分析了 std::move 的.原创 2021-10-11 09:55:44 · 3152 阅读 · 1 评论 -
C/C++学习记录:std::move 源码分析
抽空扣一点感兴趣的标准库源码,这里总结一下 std::move() 相关的分析本文中 gcc version: 8.4.1 20200928 (Red Hat 8.4.1-1) (GCC)其中c++库安装路径为 /usr/include/c++/8目录一、源码与分析1. std::move 源码总览2. std::remove_reference 源码分析3. static_cast 分析4. std::move 分析5. std::move 中的引用折叠二、总结一、源码与分析1. std::.原创 2021-10-10 14:15:11 · 2623 阅读 · 3 评论 -
公钥、私钥与证书 —— 相关内容分析与实践
这是我在实习中碰到的一些内容,因为之前对这一块内容一窍不通,所以就抽了几天学习了一下,不得不说收获颇丰。借着这次的学习,对加密解密这方面的概念有了一定的认识,对信息传输安全相关的内容算是打了个基础,正好之前我也有做网络编程,感觉是可以尝试加入一下加密策略,不让报文裸奔了。然后就是借着证书了解了一下http/https,算是对网络有了一点新的个人理解吧。受组里的影响,我现在所有的总结都是在有道云笔记上进行的,但是说实话上面搜索有点操蛋另外markdown不让传图,由此这种长篇大论还是适合发在优快云上。.原创 2021-08-26 21:32:35 · 1544 阅读 · 1 评论 -
C/C++学习记录:深入理解三种传参方式
C/C++学习记录:深入理解三种传参方式 之前对传参这方面的东西一直是知其然不知所以然。概念用法怎么用都知道,但是其真正的内部操作流程确实是理解不足。这两天一直在总结shell脚本的笔记,写累了正好研究一下传参这方面的内容。 这篇笔记中记录了关于这方面我的理解过程和心得。关于本篇笔记的深度,也是到汇编为止不再深入,就我个人理解来看已经是足够了。目录一、关于三种传参方式1. 值传参1.1 简单总结1.2 我的疑问2. 引用传参2.1 简单总结2.2 我的疑问3. 指针传参3.1 简单总结3.2 我原创 2021-08-23 00:06:44 · 2360 阅读 · 0 评论 -
Linux学习记录:Makefile
Makefile学习记录这是本人在学习makefile时的记录,方便日后查询。所有我遇到的makefile相关的内容都会被记录在这篇笔记中,所以在之后接触到makefile相关的新内容后,会对这篇笔记的内容进行更新。目录Makefile学习记录零、Makefile简介零、Makefile简介描述了整个工程的编译、链接规则· 工程中的哪些源文件需要编译以及如何编译· 需要创建哪些库文件以及如何创建这些库文件· 如何产生期望得到的最终可执行文件· 可以快速的构建和管理工程mak原创 2021-08-08 23:33:05 · 839 阅读 · 2 评论 -
数据结构实操:STL标准红黑树(一)
数据结构实操:STL标准红黑树(一)之前一直在看侯捷大佬的《STL源码剖析》,透过标准库里的代码学到了许多。随后便想着按照STL标准来简单重写一个红黑树。当然,这里的简单是指对空间配置器结构的一些省略。代码部分本来在6月低就基本完成了,但是因为7月忙着吸收总结实习中学习的内容,所以一直搁置了红黑树的总结。由于《STL源码剖析》中并没有红黑树节点删除相关以及一些小细节的讲解,所以相关的内容是我在别的地方学习后根据STL标准自己补全的代码,如有纰漏,还请提醒。本此总结预计分为三篇,(一)中主要记录相关的原创 2021-08-02 22:49:11 · 716 阅读 · 0 评论 -
C++网络编程学习:线程退出安全优化
网络编程学习记录使用的语言为C/C++源码支持的平台为:Windows(本文中内容使用windows平台下vs2019开发,故本文项目不完全支持linux平台)C++网络编程学习:心跳机制与定时发送数据 点我查看之前的代码开发记录笔记十二网络编程学习记录0:本次增改方向1:封装线程类相关2:退出顺序相关0:本次增改方向封装自己的线程类,使其可以控制线程及时关闭使得程序可以按合适的顺序正常退出,避免因退出顺序问题引发崩溃1:封装线程类相关 首先,为何要及时使得线程退出?因为我的原创 2021-05-28 13:18:42 · 1765 阅读 · 2 评论 -
C++学习记录:C++连接Redis数据库
C++学习记录:C++连接Redis数据库 之前学习了Redis数据库相关的内容,但是并没有在编写C++代码中用到Redis相关内容。 本篇笔记记录了个人在 Linux 环境下使用 C++ 连接 Redis 数据库的过程。实现了一个简单的排行榜功能。 由于现在的主流是使用 java 连接 redis,所以在网上查询 C语言 的API消耗了一部分时间,在本篇笔记中,我将记录相关数据结构和API的使用方法。目录C++学习记录:C++连接Redis数据库一、基础准备1. 找到`hiredis.h`原创 2021-05-23 12:01:02 · 1580 阅读 · 1 评论 -
C++学习记录:C++连接MySql数据库
C++学习记录:C++连接MySql数据库 之前学习了MySql数据库相关的内容,但是并没有在编写C++代码中用到MySql相关内容。 本篇笔记记录了个人在 VS2019 中使用 C++ 连接 MySql 数据库的过程。使C++代码中可以实现连接数据库、执行语句、显示查询结果等基础功能。目录C++学习记录:C++连接MySql数据库一、基础准备1. 在目录中添加路径2. 添加依赖项3. 移动DLL文件※ 注意一、基础准备1. 在目录中添加路径 首先找到 MySql 所在的文件夹,其中有i原创 2021-05-22 12:28:17 · 18990 阅读 · 5 评论 -
C++网络编程学习:心跳机制与定时发送数据
网络编程学习记录使用的语言为C/C++源码支持的平台为:Windows(本文中内容使用windows平台下vs2019开发,故本文项目不完全支持linux平台)C++网络编程学习:项目化 (加入内存池静态库 / 报文动态库) 点我查看之前的代码开发记录笔记十一网络编程学习记录0:本次增改内容1:更改客户端储存方式2:更改任务队列储存方式3:加入心跳检测机制4:加入定时发送缓存消息机制0:本次增改内容更改服务端中,客户端对象储存的方式,由vector改为map。改变任务队列中任务储存方原创 2021-05-08 19:29:13 · 7324 阅读 · 6 评论 -
C++网络编程学习:项目化 (加入内存池静态库 / 报文动态库)
网络编程学习记录使用的语言为C/C++源码支持的平台为:Windows(本文项目全部使用windows平台下vs2019开发,故本文项目不支持linux平台)笔记一:建立基础TCP服务端/客户端 点我跳转笔记二:网络数据报文的收发 点我跳转笔记三:升级为select网络模型 点我跳转笔记四:跨平台支持Windows、Linux系统 点我跳转笔记五:源码的封装 点我跳转笔记六:缓冲区溢出与粘包分包 点我跳转笔记七:服务端多线程分离业务处理高负载 点我跳转笔记八:对sock原创 2021-04-26 23:09:03 · 3584 阅读 · 7 评论 -
C++学习记录:内存池设计与实现 及其详细代码
C++学习记录:内存池设计与实现 及其详细代码 这是我在VS2019上写的第一个项目,使用VS2019的目的是想在更为规范的IDE上写出更加完美的代码。 在这个项目中,我遵守了:头尾分离、双等号左边为常量、类成员变量统一下划线开头、指针变量为p开头、布尔变量为b开头等。 使用内存池可以减少程序运行中产生的内存碎片,且可以提高程序内存分配效率从而提升程序效率。在这篇笔记中,我将记录下自己关于这个内存池项目的思路与详细代码。同时,在我的C++网络编程学习相关内容的下一步改进中,我将引入这个内存池提高原创 2021-03-01 00:00:30 · 3618 阅读 · 12 评论 -
C++网络编程学习:消息接收与发送分离
网络编程学习记录使用的语言为C/C++源码支持的平台为:Windows / Linux笔记一:建立基础TCP服务端/客户端 点我跳转笔记二:网络数据报文的收发 点我跳转笔记三:升级为select网络模型 点我跳转笔记四:跨平台支持Windows、Linux系统 点我跳转笔记五:源码的封装 点我跳转笔记六:缓冲区溢出与粘包分包 点我跳转笔记七:服务端多线程分离业务处理高负载 点我跳转笔记八:对socket select网络模型的优化 点我跳转笔记九:消息接收与发送分离原创 2021-02-21 14:24:33 · 2326 阅读 · 11 评论 -
C++网络编程学习:对socket select网络模型的优化
网络编程学习记录使用的语言为C/C++源码支持的平台为:Windows / Linux笔记一:建立基础TCP服务端/客户端 点我跳转笔记二:网络数据报文的收发 点我跳转笔记三:升级为select网络模型 点我跳转笔记四:跨平台支持Windows、Linux系统 点我跳转笔记五:源码的封装 点我跳转笔记六:缓冲区溢出与粘包分包 点我跳转笔记七:服务端多线程分离业务处理高负载 点我跳转笔记八:对socket select网络模型的优化笔记八网络编程学习记录零、思路与流程原创 2021-02-20 22:00:28 · 875 阅读 · 0 评论 -
C++网络编程学习:服务端多线程分离业务处理高负载
网络编程学习记录使用的语言为C/C++源码支持的平台为:Windows / Linux笔记一:建立基础TCP服务端/客户端 点我跳转笔记二:网络数据报文的收发 点我跳转笔记三:升级为select网络模型 点我跳转笔记四:跨平台支持Windows、Linux系统 点我跳转笔记五:源码的封装 点我跳转笔记六:缓冲区溢出与粘包分包 点我跳转笔记七:服务端多线程分离业务处理高负载 笔记七网络编程学习记录一、思路与准备二、代码的改进一、思路与准备之前的服务端思路大概是如下的原创 2021-02-07 14:05:55 · 3914 阅读 · 10 评论 -
C++学习记录:基于chrono库的高精度计时器
C++学习记录:基于chrono库的高精度计时器 C++11中新引入了std::chrono库,由此可以较为容易的实现一个计时器。同时,休眠操作也可以通过这个库来实现,从而使代码有良好的跨平台性,避免使用Windows/Linux的系统休眠函数。 在接下来的网络编程学习中,将引入该计时器,实现对每秒收包、连接等数据的计数显示。 本篇学习记录使用的语言为C++,调用的库为C++11里的std::chrono库。目录C++学习记录:基于chrono库的高精度计时器一、简易的计时器类二、基于chr原创 2021-02-05 19:25:08 · 1687 阅读 · 0 评论 -
C++学习记录:多线程相关
C++学习记录:多线程相关 之前学过一点C语言多线程方面的内容(pthread.h),但是仅仅是会用,对多线程的实现原理什么的基本上算是不了解。接下来,我的网络编程学习要进一步对代码进行优化,其中肯定少不了对多线程的运用,所以在进行下一步之前,先系统的学习一下多线程。 本篇学习记录使用的语言为C++,调用的线程库为C++11里的std::thread库。目录C++学习记录:多线程相关零、基本概念一、基本线程创建 `thread`二、等待/分离 `join/detach`三、锁 `lock/unl原创 2021-01-31 14:08:47 · 330 阅读 · 0 评论 -
KeepAlive小项目 基于Qt/C++实现后台自动提醒休息
KeepAlive小项目 前两天在blink上发的思路,花了一天时间给实现了 。不得不说,好久没写Qt程序,手生了不少,要不应该可以更有效率的。目录KeepAlive小项目一、功能二、详细介绍三、源码下载四、可执行文件下载一、功能主要实现以下功能:显示当前系统时间给定一个定期提醒时间间隔,显示离提醒还有多久显示程序运行以来经过的时间可最小化到托盘,实现后台运行当达到提醒时间间隔后,弹窗提醒辅助功能:可手动输入,调整时间间隔可自动创建桌面快捷方式关于二、详细介绍程序主原创 2021-01-29 22:29:05 · 750 阅读 · 4 评论 -
C++网络编程学习:缓冲区溢出与粘包分包
网络编程学习记录使用的语言为C/C++源码支持的平台为:Windows / Linux笔记一:建立基础TCP服务端/客户端 点我跳转笔记二:网络数据报文的收发 点我跳转笔记三:升级为select网络模型 点我跳转笔记四:跨平台支持Windows、Linux系统 点我跳转笔记五:源码的封装 点我跳转笔记六:缓冲区溢出与粘包分包笔记六网络编程学习记录一、关于缓冲区溢出1.缓冲区溢出的原因2.缓冲区溢出的处理方法二、粘包与分包1.粘包与分包的原因2.粘包与分包的处理方法2.1客户原创 2021-01-28 11:53:13 · 2281 阅读 · 8 评论 -
C++网络编程学习:源码的封装
网络编程学习记录使用的语言为C/C++源码支持的平台为:Windows / Linux笔记一:建立基础TCP服务端/客户端 点我跳转笔记二:网络数据报文的收发 点我跳转笔记三:升级为select网络模型 点我跳转笔记四:跨平台支持Windows、Linux系统 点我跳转笔记五:源码的封装笔记五网络编程学习记录一、为何要进行封装操作二、封装的思路与相关1.封装的头文件选择2.客户端类的封装3.服务端类的封装三、封装后的详细源码及其注释1.客户端TcpClient.hppclien原创 2021-01-26 21:42:02 · 1910 阅读 · 5 评论 -
C++网络编程学习:跨平台支持Windows、Linux系统
网络编程学习记录使用的语言为C/C++笔记一:建立基础TCP服务端/客户端 点我跳转笔记二:网络数据报文的收发 点我跳转笔记三:升级为select网络模型 点我跳转笔记四:跨平台支持Windows、Linux系统笔记四网络编程学习记录一、为何要进行跨平台操作二、关于Win与Linux系统下网络编程的差异差异一差异二差异三差异四三、基于笔记三进行 源码跨平台化升级1.客户端源码一、为何要进行跨平台操作 首先,我是想在网络编程学习渐入佳境后,自己尝试做一个网络方面的项目,其中就必须原创 2021-01-24 20:09:34 · 2883 阅读 · 0 评论 -
C++网络编程学习:升级为select网络模型
网络编程学习记录使用的语言为C/C++笔记一:建立基础TCP服务端/客户端 点我跳转笔记二:网络数据报文的收发 点我跳转笔记三:升级为select网络模型笔记三网络编程学习记录一、为何要使用select网络模型?二、select系统及其相关★ select相关使用总结与心得三、升级为select网络模型的思路1.服务端升级(select)2.客户端升级(select+多线程)四、代码及其详细注释1.服务端代码2.客户端代码一、为何要使用select网络模型? 通过前面的学习,已经实原创 2021-01-23 22:36:50 · 2044 阅读 · 0 评论 -
C++网络编程学习:网络数据报文的收发
网络编程学习记录使用的语言为C/C++笔记一:建立基础TCP服务端/客户端 点我跳转笔记二:网络数据报文的收发笔记二网络编程学习记录一、网络数据报文的格式定义二、将包头与包体数据分开收发1.概括2.代码及其详细注释服务端代码:客户端代码:一、网络数据报文的格式定义报文有两个部分,包头和包体,是网络消息的基本单元。包头: 描述本次消息包的大小,描述包体数据的作用。包体: 其中包含了需要传输的数据。 根据此数据结构,我们可以根据包头的内容,来灵活的对包体的数据进行处理。二、将包原创 2021-01-22 12:25:43 · 6603 阅读 · 0 评论 -
C++网络编程学习:建立基础TCP服务端/客户端
网络编程学习记录笔记一:建立简易TCP服务端/客户端笔记一网络编程学习记录一、建立简易TCP服务端1.建立服务端大致流程2.代码实现以及详细注释二、建立简易TCP客户端1.建立客户端大致流程2.代码实现以及详细注释一、建立简易TCP服务端1.建立服务端大致流程建立一个套接字 (socket)绑定客户端连接的端口 (bind)监听网络端口 (listen)等待接受客户端连接 (accept)接收客户端发送的数据 (recv)向客户端发送数据 (send)关闭套接字 (closesoc原创 2021-01-21 17:49:20 · 5211 阅读 · 5 评论 -
使用g++创建动态库和静态库及其相关探索
使用g++创建动态库和静态库及其相关探索目录使用g++创建动态库和静态库及其相关探索0.前期准备1.静态库创建及链接2.动态库创建及链接3.相关探索0.前期准备首先我们建立头文件 “hello.h”内容如图:随后我们建立源文件 “hello.cpp”内容如图:最后我们建立源文件 “main.cpp”内容如图:我们使用 g++ -c 编译出.o文件。无论是动态库还是静态库,都得由.o文件创建,所以我们先编译出.o文件。结果如图:可以看到有 hello.o原创 2020-12-07 23:39:51 · 1341 阅读 · 1 评论 -
C语言实现大整数加减 数组实现
目录思路导图完整代码思路导图完整代码#include<bits/stdc++.h>void add(int* count_1,int *count_2,int *ans,int max){ for(int now=0;now<max;now++) { ans[now]+=count_1[now]+count_2[now];//这一位的值加上第一个数组的该位值 再加上第二个数组的该位值 if(ans[now]>=10)//大于10就进原创 2020-10-13 23:25:06 · 2234 阅读 · 3 评论 -
C语言读取.csv文件数据并分组
C语言读取.csv文件并分组核心就是.csv文件各组数据之间用‘,’逗号来分割,我们使用C语言的strtok函数对.csv文件的每一行数据进行分割即可。代码如下:#include<bits/stdc++.h>using namespace std;void cut(char *line,int num)//读入这一行的数据 / 数据的组数-1(逗号的个数) { char *temp; temp=strtok(line,","); if(temp) {原创 2020-09-11 22:34:12 · 1528 阅读 · 0 评论 -
c/c++算法 基础题 练手汇总
#练手基础题汇总#因为是基础题所以都不算难,个人把碰见过的感觉比较好的练手基础题在这里做个汇总,方便查阅。目录枚举1.安全区枚举一般都是数据量比较小的简单题,难点在于对数据的判断处理。用循环直接对数据区间枚举随后进行判断即可。如果数据量较大,就优化判断条件或者找共性减少运算时间。1.安全区题目描述在一个nn的网格图上有m个探测器,第i个探测器位于(xi,yi)位置,探测半径为ri。求出nn个点中有多少个是安全的点,即未被探测的点。输入第一行为两个整数n,m(1<=n<=1原创 2020-09-02 18:40:16 · 1700 阅读 · 0 评论