内存占用
-
C++ list用法详解_C++双向链表常用操作
std::list是C++ STL中的双向链表容器,1. 需包含头文件,支持多种初始化方式;2. 提供push_front、push_back、insert等高效插入操作及pop_front、erase等删除操作,front和back可访问首尾元素;3. 不支持下标访问,需用迭代器或范围for循环遍…
-
c++中的二进制序列化与反序列化_c++ FlatBuffers与Cap’n Proto
FlatBuffers和Cap’n Proto是高性能二进制序列化库,支持零拷贝访问;FlatBuffers通过schema定义数据结构,使用flatc生成代码,实现高效序列化与直接访问,适用于C++等多语言环境。 在C++中进行高效的数据持久化或网络传输时,二进制序列化是关键环节。相比…
-
C++中的类型擦除(Type Erasure)是什么技术?C++泛型编程实践【高级设计】
类型擦除是通过间接层隐藏具体类型细节、提供统一接口的技术。它用操作表封装构造/析构/调用等行为,实现如std::function、std::any等容器对异构类型的统一处理,兼顾灵活性与类型安全。 类型擦除是一种让不同具体类型能通过统一接口被操作,同时隐藏其原始类型信息的技术。它不是删除类型,而是把…
-
C++如何实现一个Bloom Filter?C++空间高效的概率数据结构【算法】
Bloom Filter是一种空间高效的概率型数据结构,用于判断元素“可能在集合中”或“绝对不在”,仅用位数组和多个哈希函数实现,支持add()和contains(),但不支持删除,存在可控误判率。 什么是Bloom Filter?为什么用C++实现 Bloom Filter 是一种空间高效的概率型…
-
C++ STL中的list和vector如何选择?C++容器性能对比分析【数据结构】
选vector而非list,因vector随机访问O(1)、内存连续、缓存友好;list仅在持有迭代器且频繁中间插删时更优,但内存开销大、访问慢。 选 vector 还是 list,关键看操作模式,不是看“哪个更高级”。vector 随机访问快、内存连续、缓存友好;list 插删快(尤其中间)、不挪…
-
C++中的unordered_map和map有什么区别?C++哈希表性能分析【STL进阶】
unordered_map是哈希表,平均O(1)查找但无序;map是红黑树,稳定O(log n)且按键有序、支持范围查找;前者要求key可哈希,后者要求key可比较;适用场景取决于是否需顺序、范围查询及性能敏感度。 unordered_map 是哈希表,map 是红黑树;前者平均 O(1) 查找,后…
-
c++如何实现一个享元模式_c++结构型设计模式Flyweight【性能优化】
享元模式通过共享内在状态、分离外在状态来减少内存占用;核心是用工厂缓存并复用相同内在状态的对象,客户端传入外在状态调用行为。 享元模式(Flyweight)在 C++ 中主要用于减少内存占用,通过共享大量细粒度对象来提升性能,特别适用于对象数量庞大、状态可分“内在”与“外在”的场景(比如文字编辑器中…
-
c++中的引用和指针有何区别_c++引用与指针深度辨析
引用是变量别名,必须初始化且不可重绑定,无额外内存开销,安全性高;指针是独立变量存储地址,可重新赋值和为空,占用固定内存,灵活性强但风险较高;引用适用于函数传参和返回值,指针用于动态内存和复杂数据结构,选择依据使用场景。 在C++中,引用和指针都能间接操作变量,但它们在本质、使用方式和底层机制上存在…
-
c++中的协程(coroutine)与线程的区别_c++并发模型选择【C++20】
协程是语言级轻量控制流机制,用于异步/生成器等场景;线程是OS级并发单元,负责真正并行。二者解决不同问题,需依任务性质协同使用。 协程不是线程,也不是线程的替代品——它们解决的是不同层面的问题。C++20 引入的协程是**语言级的轻量级控制流机制**,用于简化异步、生成器、状态机等场景;而线程是操作…
-
c++的符号可见性(Symbol Visibility)是什么_c++优化动态库加载速度
符号可见性通过减少导出符号数量来提升动态库加载速度。默认全局符号可见会增加链接开销,使用-fvisibility=hidden编译选项可隐藏非必要符号,再用__attribute__((visibility(“default”)))显式导出公共接口,结合宏定义和版本脚本优化管…