07 2023 档案
摘要:知识储备 C语言 C++ 汇编 Linux 汇编补充C++文章复习 汇编部分补充 数据描述符 AX累加器:用到最多最频繁,AX,AH和AL在乘,除法等操作中有专门的用途。 BX基址寄存器: 用于存放偏移地址 CX为计数寄存器:在循环操作中做计数器用,用于控制循环程序的执行次数 DX数据寄存器:在乘,
阅读全文
摘要:挑战一篇文章搞定C语言核心语法。 如果你点进这篇文章说明你对C语言是有兴趣的,或者学过一些C语言。不知道大家在学习C语言的过程中有没有这样的经历。 学了一阵,能写一些小程序了。 工作中用不到C语言,加了几天班,回过头来想再捡起来。发现,不知道怎么下手了。比如,要使用printf这个函数,到底应该引用
阅读全文
摘要:docker不是一个值得投入的领域,它解决的问题是Unix系统最初设计的一个疏忽。从一个不会用docker的小白,自己一步一步的摸索,中间也踩过许多坑。但任然,坚持从哪里跌倒就从哪里爬起来。不求感动自己,但求人生无悔。 1 容器简介1.1 什么是 Linux 容器1.2 容器不就是虚拟化吗1.3 容
阅读全文
摘要:Raw string literals are string literals that can span multiple lines of code, they don’t require escaping of embedded double quotes, and escape sequen
阅读全文
摘要:C++20 协程 C++ 20有一个新玩意,协程。这玩意对C++的未来可能是重要一环,也会是让C++成为服务器编程有力工具。 对C++20的协程,最简单的理解协程是可以重入的特殊函数。就是这个函数在执行的过程,可以(通过co_await ,或者co_yield)挂起,然后在外部(通过coroutin
阅读全文
摘要:随着coroutine ts正式进入c++20,c++已经进入协程时代了。c++20提供的无栈协程,拥有许多无与伦比的优越性,比如说没有传染性,可以与以前非协程风格的代码并存,再比如说不需要额外的调度器,总之是个好东西。 但是不幸的是c++20的协程标准只包含编译器需要实现的底层功能,并没有包含简单
阅读全文
摘要:概述 Asio 是一个用于网络和低级 I/O 编程的跨平台 C++ 库,它使用现代 C++ 方法为开发人员提供一致的异步模型. io_context io_context 类为异步I/O对象的用户提供了核心I/O功能,包含: asio::ip::tcp::socket asio::ip::tcp::
阅读全文
摘要:目录 1. std::vector2. vector的用法 2.1 vector的定义和声明 2.2 成员函数 2.2.1 基本函数 operator= assign get_allocator 2.2.2 元素访问 at operator[] front back data 2.2.3 迭代器 b
阅读全文
摘要:目录 一、前言 (1)分治算法 (2)分治算法解题方法 1.分解: 2.治理: 3.合并 二、归并排序 1.问题分析 2.算法设计 (1)分解: (2)治理: (3)合并: 3.算法分析 三、AC代码 四、共勉 一、前言(1)分治算法 归并排序,其实就是一种分治算法 ,那么在了解归并排序之前,我们先
阅读全文
摘要:背景 多线程编程在实际应用中非常常见,它可以帮助我们提高程序性能,实现高效的任务调度。从C++11开始,C++语言已经提供了对多线程编程的原生支持。本文将详细介绍如何使用C++进行线程管控,包括发起线程、等待线程完成、异常处理以及在后台运行线程等内容。 发起线程 C++11提供了一个名为std::t
阅读全文
摘要:背景 随着多核处理器的普及,多线程编程已经成为软件开发中不可或缺的一部分。C++11标准为我们带来了线程库,让我们能够更方便地在C++中实现多线程编程。在这篇博客中,我们将介绍C++线程管控的基本概念和方法,包括向线程函数传递参数,移交线程归属权,运行时选择线程数量和识别线程。 向线程函数传递参数
阅读全文
摘要:背景 在多线程编程中,死锁是一个常见的问题,它会导致程序陷入无法继续执行的状态。在这篇博客中,我们将介绍C++中死锁的概念、产生原因以及解决办法。 什么是死锁? 死锁是指多个线程在等待对方释放资源,导致彼此都无法继续执行的情况。死锁通常发生在多个线程同时锁定多个互斥锁的情况下。以下是一个简单的死锁示
阅读全文
摘要:背景 在多线程编程中,线程间共享数据是一种常见的情况。然而,如果不加以处理,共享数据可能导致一些问题,如条件竞争。在这篇博客中,我们将介绍C++线程共享数据的问题,包括条件竞争的概念以及防止恶性条件竞争的方法。 什么是条件竞争? 条件竞争(Race Condition)是指多个线程在访问和操作共享数
阅读全文
摘要:背景 在C++多线程编程中,线程间共享数据是一种常见的情况。然而,如果不加以处理,共享数据可能导致一些问题,如条件竞争。本文将介绍C++中多线程共享数据的方式,包括各种方式的使用场景和比较。 使用互斥锁(Mutex) 互斥锁(Mutex)是一种同步原语,用于保护共享数据的访问。当一个线程访问共享数据
阅读全文
摘要:背景 在C++多线程编程中,锁是一种常用的同步原语,用于保护共享数据的访问。C++标准库提供了多种锁类型,适用于不同的使用场景。在这篇博客中,我们将介绍C++中的各种锁类型,比较它们的特点,并探讨不同锁在实际应用中的使用场景。 std::mutex std::mutex是C++标准库中最基本的互斥锁
阅读全文
摘要:背景 在C++多线程编程中,同步线程间的操作和结果通常是一个关键问题。C++11引入了std::future这一同步原语,用于表示异步操作的结果。本文将介绍C++中std::future的使用方法、优势以及与其他同步方法的对比。 使用std::future std::future表示一个异步操作的结
阅读全文
摘要:背景 C++内存模型是C++程序中内存管理和数据存储的基础。了解C++内存模型的概念和运作机制对于编写高效、安全的C++代码至关重要。本文将详细介绍C++内存模型的基本概念、内存分配策略以及与其相关的代码示例。 C++内存模型的基本概念 C++内存模型主要包括以下几个部分: 静态存储区:用于存储全局
阅读全文
摘要:背景 在C++多线程编程中,线程间的同步与顺序执行是至关重要的。同步操作可以确保线程间的数据一致性,避免数据竞争和死锁问题。强制次序则可以确保线程间的操作按照预期顺序执行。本文将详细介绍C++多线程编程中的同步关系、先行关系、原子操作的内存顺序、释放序列和同步关系、栅栏,以及如何凭借原子操作令非原子
阅读全文
摘要:背景 在多线程编程中,线程间的同步和数据竞争问题是无法避免的。传统的同步方法,如互斥锁(mutex)和条件变量(condition variable),可能导致性能下降和死锁等问题。C++11引入了原子操作,提供了一种更高效、安全的多线程编程方式。本文将介绍C++中的原子操作概念、使用方法及示例。
阅读全文
摘要:背景 在多线程编程中,如何有效地在多个线程间切分任务是一个关键问题。合理地切分任务可以充分发挥多核处理器的性能,提高程序的运行效率。本文将介绍在线程间切分任务的原理和实践,包括任务切分策略、负载均衡、任务同步等方面的内容。 任务切分策略 在多线程编程中,我们需要根据实际需求和性能要求,选择合适的任务
阅读全文
摘要:目录: 1. 数组和std::array 2. array的用法 2.1 成员函数 2.1.1 隐式定义的成员函数 2.1.2 元素访问 at operator[] front back data 2.2.3 迭代器 begin、end和cbegin、cend rbegin、rend和crbegin
阅读全文
摘要:背景 在多线程编程中,数据结构的并发访问是一个关键问题。传统的基于锁的并发数据结构在保证数据一致性和线程安全的同时,可能会导致性能下降。无锁数据结构(Lock-free data structures)是一种高效的并发数据结构,它通过原子操作和内存顺序来实现线程安全,而无需使用锁。本文将介绍无锁数据
阅读全文
摘要:utility 包含了 STL 经常使用的几个模板函数的定义:std::move() 用于得到一个右值引用;std::swap() 使用移动语义,交换两个对象;std::forward() 支持完美转发。本文分析了上述三个模板函数的实现原理。 本文内容: 1、std::move 2、std::swa
阅读全文
摘要:const 作用 修饰变量,说明该变量不可以被改变; 修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer); 修饰引用,指向常量的引用(reference to const),用于形参类型,即避免了拷贝,又避免了函数对值的修改;
阅读全文
摘要:背景 在C++多线程编程中,同步线程间的操作和结果通常是一个关键问题。C++11引入了std::future这一同步原语,用于表示异步操作的结果。本文将介绍C++中std::future的使用方法、优势以及与其他同步方法的对比。 使用std::future std::future表示一个异步操作的结
阅读全文
摘要:编译步骤 gcc 与 g++ 区别 gcc 命令的常用选项 编译优化选项 -O 优化 -O1优化 -O2 -O0 -Os -Ofast -Og -Oz -O 选项控制特定的优化 Warnings Reference 编译步骤 gcc 、 g++分别是gnu的c & c++编译器 。实际上,GCC 能
阅读全文
摘要:红黑树 Red-black tree 自平衡二叉查找树,可在O(log n)时间内完成查找,插入和删除。 强查找. Linux 进程调度CFS epoll 事件块的管理 Nginx Timer事件管理 性质 每个节点是红色的或者黑的 根节点是黑的 每个叶子节点是黑的 如果一个节点是红的,则它的两个儿
阅读全文
摘要:B树 多路平衡搜索树 索引在内存,数据映射磁盘(磁盘页4K的整数倍), 多路,降低红黑树和二叉树的层高,降低IO访问次数 B树和B+树 B树节点中即存储数据信息,也会存储索引信息 B+树节点中即存储数据信息,也会存储索引信息,非叶子节点只有索引信息 B+ 树期待更少的磁盘IO - 将索引信息和数据信
阅读全文