文章分类 - 03C&C++
摘要:在 C++ 中实现线程的安全退出,核心是让线程能够“优雅地”结束执行,避免强制终止(如 pthread_cancel 或 terminate)导致的资源泄漏或数据不一致。以下是几种常用的线程安全退出方案: 1. 标志位退出法(最常用) 通过一个共享的原子变量(或加锁保护的变量)作为“退出标志”,线程
阅读全文
摘要:好的,这是一个非常基础且重要的问题!C++中指针大小是4字节或8位的原因直接关联到计算机系统的核心架构。 🖥️ 根本原因:CPU的寻址能力 指针大小由CPU的地址总线宽度决定,因为它存储的是内存地址。 32位系统(4字节指针) 地址总线:32位 可寻址空间:2³² = 4,294,967,296
阅读全文
摘要:以下是使用C++编写的计算三角形面积的函数,使用三个点的坐标作为参数: 向量叉积公式 #include <cmath> double calculateTriangleArea(double x1, double y1, double x2, double y2, double x3, double
阅读全文
摘要:详细总结C++中各种数据类型的内存大小。需要注意的是,这些大小是平台相关和编译器相关的,但遵循一些通用规则。 1. 基本数据类型大小(典型值) 整数类型 类型 32位系统 64位系统 说明 bool 1字节 1字节 通常1字节,但大小由实现定义 char 1字节 1字节 保证至少1字节 signed
阅读全文
摘要:场景:高并发下的锁竞争之痛 在我参与的一个高频交易模拟系统中,我们遇到了一个典型的性能瓶颈。该系统中有一个核心组件——一个多生产者、多消费者模式的任务队列。各个网络I/O线程接收到数据后,会将计算任务压入这个队列,而一群工作线程则不断地从队列中取出任务进行处理。 最初,我们使用std::mutex来
阅读全文
摘要:在C++中,内存主要分为以下几个区域: 内存区域分类 栈 (Stack) 堆 (Heap) 静态存储区/全局存储区 (Static/Global Storage) 常量存储区 (Constant Storage) 自由存储区 (Free Store) - 现代C++中常与堆合并考虑 线程局部存储 (
阅读全文
摘要:尽管智能指针很强大,但以下几种情况依然会导致内存泄漏: 1. 循环引用(Cyclic Reference) 这是 std::shared_ptr 最经典的陷阱。 #include <iostream> #include <memory> struct B; struct A { A() { std:
阅读全文
摘要:引用(左值引用) #include <iostream> #include <typeinfo> /* C++的引用 引用的和指针的区别? 1.左值引用和右值引用 2.引用的实例 引用是一种更安全的指针 1.引用是必须初始化的,指针可以不初始化 2.引用只有一级引用,没有多级引用;指针可以有一级指针
阅读全文
摘要:const和一级指针的结合应用 #include <iostream> #include <typeinfo> /* const修饰的量叫常量 普通变量的区别是什么?C++有两点区别?1.编译方式不同 2.不能作为左值了 const修饰的量常出现的错误是: 1.常量不能再作为左值《=直接修改常量的值
阅读全文
摘要:C中const示例 创建一个main.c文件如下 #include <stdio.h> /* C语言中 const修饰的量,可以不用初始化 不叫常量,叫做常变量 C中const就是当作变量来编译生成指令的 */ int main() { const int a;//C语言中常变量可以不给初值 /*
阅读全文
摘要:#include<list> #include<thread> #include<iostream> #include<chrono> #include <mutex> #include <atomic> /* C++ 11 窗口卖票 int cout=100; lock_guard<std::mu
阅读全文
摘要:线程基本用法 #include<iostream> #include <thread> #include <chrono> /* C++语言级别的多线程编程=>代码可以跨平台 windows/linux/mac thread/mutex/condition_variable lock_gard/un
阅读全文
摘要:在 C++11 中,没有直接的安全方法可以从外部强制终止一个线程。推荐的做法是使用协作式取消,即通过标志位让线程自行退出。以下是几种实现方法: 背景 c++ 11中主线程中开启子线程调用一个耗时算法,如果算法超时,主线如何结束子线程.(很多情况下算法是不能能修改的) 实现 方法1:使用原子标志位(推
阅读全文
摘要:容器数据接口及时间复杂度总结 以下是 C++ STL 容器的底层数据结构及增删查时间复杂度总结: 容器 底层数据结构 插入(平均) 删除(平均) 查找(平均) 备注 vector 动态数组 O(n) O(n) O(1)(索引) 尾部插入/删除 O(1) deque 分块数组 + 双端队列 O(1)(
阅读全文
摘要:简单工厂 #include <string> #include <iostream> /* 简单工程 Simlpe Factory(不包含在23种设计模式中) 工程方法 Factory Method 抽象工程 Abstract Factory 工厂模式:主要时封装了对象的创建 */ class Ca
阅读全文
摘要:参考 1.百度C++二面:C/C++ 中 volatile 关键字的作用? 2.C++中的关键字volatile详解 3.C++ volatile 4.C++ 高级语法:volatile
阅读全文
摘要:懒汉式单例模式 #include <iostream> /* 单例模式:一个类不管创建多少个对象,永远只能得到该类型一个对象的实例 常用到,比如日志模块、数据库模块 单例模式类型: 饿汉式单例模式:还没有获取实例对象,实例对象就已经产生了(导致程序启动时就需要实例化调用构造函数,如果构造函数需要做大
阅读全文
摘要:通过函数指针实现如下功能 #include<iostream> /* 函数对象=>C语言里面的函数指针 */ template<typename T> inline bool myless(T a, T b) //即使这里使用了inline指定为内联,但是在调用compare不是以内联方式展开调用
阅读全文
摘要:#include<iostream> /* C++的运算符重载:使对象的运算表现得和编译器内置类型一样 */ class CComplex { public: CComplex(int r = 0, int i = 0) :m_real(r), m_imaginary(i) { } //指导编译器怎
阅读全文
浙公网安备 33010602011771号