上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 33 下一页
摘要: C++ 类型萃取 C++ 类型萃取(Type Traits)是模板元编程的核心工具之一,用于在编译期分析和操纵类型信息。它们常用于泛型编程中,帮助我们写出更通用、类型安全的代码,特别是在 STL、标准库实现、SFINAE、concepts 等地方广泛使用。 核心思想 通过模板结构体和偏特化机制,在编 阅读全文
posted @ 2025-05-28 13:27 _Sylvan 阅读(254) 评论(0) 推荐(0)
摘要: C++ NULL 与 nullptr 在 C++ 中,nullptr 和 NULL 都表示空指针,但它们之间有一些关键区别,特别是在类型安全和现代 C++ 编程中的推荐使用方式上: NULL 通常被定义为 0 或 ((void*)0)(依赖于编译器和平台)。 类型不明确: 在 C++ 中是一个整数常 阅读全文
posted @ 2025-05-28 13:09 _Sylvan 阅读(87) 评论(1) 推荐(1)
摘要: auto 关键字 auto 是 C++ 中一个非常有用的关键字,用于自动类型推断(type inference)。从 C++11 开始引入,在 C++14 和 C++17 中功能不断增强。 auto 是什么? auto 让编译器根据变量的初始值自动推导其类型,避免显式地写出复杂冗长的类型名。 aut 阅读全文
posted @ 2025-05-28 13:08 _Sylvan 阅读(178) 评论(0) 推荐(1)
摘要: C++ 常见内存错误 野指针(Dangling Pointer) 指针指向已经被释放或无效的内存。 int* p = new int(10); delete p; *p = 5; // 使用了悬空指针,未定义行为 悬挂引用(Dangling Reference) 引用指向已经销毁的对象。 int& 阅读全文
posted @ 2025-05-27 23:43 _Sylvan 阅读(54) 评论(0) 推荐(0)
摘要: 内存池 内存池(Memory Pool)是一种提前分配一大块内存、并在之后反复复用这块内存来分配/释放对象的技术,目的是为了提高性能、降低内存碎片、避免频繁调用 malloc/new 等昂贵操作。 为什么要用内存池 标准的 new / malloc 调用: 都涉及系统调用(如 sbrk, mmap) 阅读全文
posted @ 2025-05-27 23:27 _Sylvan 阅读(75) 评论(0) 推荐(0)
摘要: 对比 malloc-free 与 new-delete malloc/free 与 new/delete 是 C++ 中两种动态内存分配和释放的机制,分别源自 C 和 C++ 语言。它们在底层实现、用途、语义和使用场景上有显著差异。 基本语法和用途 功能 malloc / free new / de 阅读全文
posted @ 2025-05-27 23:21 _Sylvan 阅读(35) 评论(0) 推荐(0)
摘要: malloc-free 内存分配原理 malloc 通过 arena 管理堆,每次分配先在 bins 中找合适的空闲 chunk,找不到就从 top chunk 切割或用 mmap; free 则把 chunk 放回 bins,必要时与相邻空闲块合并,但通常不会立即归还操作系统。 基本概念 操作 描 阅读全文
posted @ 2025-05-27 23:06 _Sylvan 阅读(99) 评论(0) 推荐(0)
摘要: 内存映射 内存映射(Memory Mapping)是一种操作系统提供的机制,它允许把文件或设备中的内容映射到进程的虚拟内存空间中,从而使得程序可以像访问普通内存一样访问文件内容或硬件资源。这种机制广泛用于文件 IO 优化、进程间通信、设备访问等场景。 基本概念 内存映射是指:把一个文件或设备的内容直 阅读全文
posted @ 2025-05-27 20:09 _Sylvan 阅读(212) 评论(0) 推荐(0)
摘要: RAII RAII(Resource Acquisition Is Initialization)是 C++ 中一项非常重要的资源管理思想。它是 C++ 语言设计中自动管理资源的一种惯用方法,广泛应用于标准库(如 std::vector, std::unique_ptr, std::lock_gua 阅读全文
posted @ 2025-05-27 16:04 _Sylvan 阅读(54) 评论(0) 推荐(0)
摘要: C++ 复杂类型声明的阅读 在 C++ 中,复杂类型声明(如指针、数组、函数指针、引用等混合嵌套的声明)确实难读。理解这类声明的核心技巧是掌握“从标识符出发,遵循优先级规则,使用右左规则(Right-Left Rule)”进行分析。 右左法则 从变量名(标识符)开始,按照以下优先级顺序分析: 1. 阅读全文
posted @ 2025-05-27 15:37 _Sylvan 阅读(32) 评论(0) 推荐(0)
摘要: C++ 程序内存布局 进程地址空间是指进程能够访问的虚拟地址范围。在大多数操作系统中(如 Linux、Windows 等),进程地址空间被划分为两个主要部分: 用户态(用户区) 内核态(内核区) 以 32 位 Linux 为例(3G/1G 分布): 区域 地址范围 所属空间 说明 用户区 0x000 阅读全文
posted @ 2025-05-27 11:49 _Sylvan 阅读(52) 评论(0) 推荐(0)
摘要: C++虚函数表 C++ 中的虚函数表(vtable)是实现运行时多态性(polymorphism)的核心机制。它是编译器在支持虚函数时使用的一种内部技术。 什么是虚函数表 虚函数表(vtable)是一个指针数组,每个数组元素都是指向某个类的虚函数实现的指针。这个表是由编译器在编译时生成的,并用于支持 阅读全文
posted @ 2025-05-27 02:39 _Sylvan 阅读(67) 评论(0) 推荐(0)
摘要: this 指针 在 C++ 中,每个非静态成员函数(普通成员函数)都有一个隐式的指针参数 this,它指向调用该成员函数的对象本身。 class Person { public: string name; void setName(string name) { this->name = name; 阅读全文
posted @ 2025-05-27 01:57 _Sylvan 阅读(31) 评论(0) 推荐(0)
摘要: C++ 深拷贝浅拷贝 在 C++ 中,深拷贝(deep copy)和浅拷贝(shallow copy)是对象复制时的两个重要概念,尤其在类中含有指针成员时特别关键。 浅拷贝 拷贝的是指针的值,也就是让两个对象共享同一块内存。 如果一个对象释放了内存,另一个对象指针就成了悬垂指针(野指针) -> 会出 阅读全文
posted @ 2025-05-27 01:39 _Sylvan 阅读(21) 评论(0) 推荐(0)
摘要: C++ 初始化析构顺序 类成员的初始化顺序 初始化顺序规则: 类成员变量的初始化总是按照它们在类中出现的声明顺序进行,而不会受构造函数初始化列表中书写顺序的影响。 析构顺序与初始化顺序相反。 #include <iostream> using namespace std; struct A { A( 阅读全文
posted @ 2025-05-26 22:10 _Sylvan 阅读(91) 评论(0) 推荐(0)
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 33 下一页