动态内存管理
摘要:C/C++ malloc-free底层原理-动态内存管理 关于动态内存管理这块在面试中被考察频率非常高,切入的点也很多,有从操作系统虚拟内存问起的,也有从 malloc、new 等开始问起的。 但是无外乎就是两块内容: 虚拟内存机制:物理和虚拟地址空间、TLB 页表、内存映射 动态内存管理:内存管理
阅读全文
智能指针
摘要:C++ 智能指针解析 为什么需要智能指针 众所周知,Java 和 C/C++ 中间隔着一堵由内存动态分配和垃圾回收机制所围成的墙。 java 大佬们经常吐槽 C++ 没有垃圾回收(Gabage Collector)机制,而 C++ 爱好者也经常攻击 Java 限制太死,不够灵活。 其实 Java 并
阅读全文
RAII思想
摘要:c++ RAII思想 什么是RAII 资源获取即初始化(Resource Acquisition Is Initialization,简称 RAII)是一种 C++ 编程技术,它将在使用前获取(分配的堆内存、执行线程、打开的套接字、打开的文件、锁定的互斥量、磁盘空间、数据库连接等有限资源)的资源的生
阅读全文
c++引用
摘要:c++指针和引用的区别 指针和引用在 C++ 中都用于间接访问变量,但它们有一些区别: 指针是一个变量,它保存了另一个变量的内存地址;引用是另一个变量的别名,与原变量共享内存地址。 指针(除指针常量)可以被重新赋值,指向不同的变量;引用在初始化后不能更改,始终指向同一个变量。 指针可以为 nullp
阅读全文
c/c++内存分区
摘要:c/c++内存分区 一般来说,程序运行时,代码、数据等都存放在不同的内存区域,这些内存区域从逻辑上做了划分,大概以下几个区域:代码区、全局/静态存储区、栈区、堆区和常量区。在 CSAPP 第九章虚拟内存,就将内存分为堆、bss、data、txt、栈等区域。 代码(.text)区 就是 .text 段
阅读全文
指针
摘要:内存就是计算机的存储空间,用于存储程序的指令、数据和状态。在 C 语言中,内存被组织成一系列的字节,每个字节都有一个唯一的地址。程序中的变量和数据结构存储在这些字节中。根据变量的类型和作用域,内存分为几个区域,如栈(stack)、堆(heap)和全局/静态存储区。 内存编址 计算机的内存是一块用于存
阅读全文
单生产者单消费者无锁队列
摘要:单生产者单消费者无锁队列 伪共享: 下图是计算的基本结构。L1、L2、L3分别表示一级缓存、二级缓存、三级缓存,越靠近CPU的缓存,速度越快,容量也越小。所以L1缓存很小但很快,并且紧靠着在使用它的CPU内核;L2大一些,也慢一些,并且仍然只能被一个单独的CPU核使用;L3更大、更慢,并且被单个插槽
阅读全文
CPU 缓存一致性
摘要:CPU 缓存一致性 参考:https://mp.weixin.qq.com/s?__biz=MzUxODAzNDg4NQ==&mid=2247486479&idx=1&sn=433a551c37a445d068ffbf8ac85f0346&scene=21#wechat_redirect CPU C
阅读全文
线程池
摘要:线程池 https://github.com/CodingHanYa/workspace 包括组件:阻塞队列; 阻塞队列 阻塞队列是线程池中用于管理任务的核心组件,它提供线程安全的任务队列,确保多个线程可以安全地向队列中添加任务或从队列中取任务。每次执行push_back或emplace_back时
阅读全文
调试工具
摘要:调试工具 Core Dump + GDB 定位 segment fault Core dump是Linux提供的一种非常实用的程序调试手段,在程序异常终止时,Linux会把程序的上下文信息记录在一个core文件中,然后可以利用GDB等调试工具对core文件进行离线调试。 很多系统中,根据默认配置,程
阅读全文
并发编程数据结构-栈
摘要:并发编程数据结构-栈 有锁栈 有锁栈 - 基础线程安全栈 Stack1 是一个简单的线程安全栈实现,使用了 std::mutex 来保证 push 和 pop 操作的原子性。主要特点包括: 使用 std::lock_guard 确保操作期间栈的线程安全。 提供了两种 push 操作(左值引用和右值引
阅读全文
C++单例模式
摘要:C++单例模式 使用单例模式的理由 在开发过程中,很多时候一个类我们希望它只创建一个对象,比如:线程池、缓存、网络请求等。当这类对象有多个实例时,程序就可能会出现异常,比如:程序出现异常行为、得到的结果不一致等。 单例主要有这两个优点: 提供了对唯一实例的受控访问。 由于在系统内存中只存在一个对象,
阅读全文
内存对齐
摘要:内存对齐 关于内存对齐,看我 - 简书 (jianshu.com) 深入了解 | 内存对齐之 alignof、alignas 、aligned_storage、align 深度剖析 - 知乎 (zhihu.com) 什么是内存对齐 计算机中内存空间是按照byte划分的,从理论上讲似乎对任何类型的变量
阅读全文
网络编程基础
摘要:五种IO模型 计算机编程中,IO模型是描述程序与输入/输出操作之间交互方式的抽象概念。不同的IO模型可以影响程序的性能、可扩展性和资源利用效率。我们常见有五种 IO 模型:阻塞式 IO、非阻塞式 IO 、IO 多路复用、信号驱动 IO、异步 IO。 阻塞式 IO listenfd = socket(
阅读全文
模板
摘要:模板 可变参数模板 可变参数模板(Variadic Templates)是C++11引入的一种强大特性,它允许模板接受可变数量的模板参数或函数参数。可变参数模板为编写通用性更强的代码提供了极大的灵活性,特别是在处理多种类型或不确定数量的参数时。 模板参数包 定义:template<typename.
阅读全文
C++继承基础
摘要:虚函数默认实参 C++默认实参是靠编译器实现的,因此默认实参不参与动态绑定,默认实参有静态类型决定。 访问控制 每个类分别控制自己的成员初始化过程,还分别控制其成员对于派生类来说是否可访问,友元不继承。 成员: protected:派生类可见、自己、friend可见 public:所有可见 priv
阅读全文
C++对象模型
摘要:C++对象模型 在C++面向对象的类中,有两种数据成员和三种成员函数: class Base{ public: Base(int i) :baseI(i){}; int getI(){ return baseI;} static void countI(){}; virtual void print
阅读全文