
C++
文章平均质量分 67
易安__
这个作者很懒,什么都没留下…
展开
-
C++并发编程实战——第五章 基于锁的并发数据结构
【代码】C++并发编程实战——第五章 基于锁的并发数据结构。原创 2023-10-03 17:20:28 · 134 阅读 · 0 评论 -
C++并发编程实战——第四章 同步操作
基本类型间的简单运算,例如:3+3,6*9,或1.3/4.7。时间点就是时间戳,而时间戳是时钟的基本属性,不可以直接查询,其在C++标准中已经指定。是 C++ 标准库提供的一个用于将函数包装成可异步执行的任务的工具。来获取时间戳,该成员函数会返回一个数值,这个数值是指定时间点与UNIX时间戳的时间间隔。会阻塞至所有线程完成任务(因此称为屏障),当最后一个线程完成任务时,所有线程被释放,结合使用,以便在一个线程中执行任务,并在另一个线程中获取任务的结果。,它用一个值作为要等待的线程的数量来构造,调用。原创 2023-10-02 14:43:07 · 116 阅读 · 0 评论 -
“声名狼藉”的双重检查锁定
在学习《C++并发编程实战》的时候,作者提到了“声名狼藉”的双重检查锁定,但是对于其中潜在的条件竞争,有点模糊,这里稍微做点笔记。原创 2023-09-27 12:07:06 · 150 阅读 · 0 评论 -
C++并发编程实战——第三章 共享数据
这个错误,即使使用了互斥量,对栈内部数据进行保护也无法阻止条件竞争的发生,原因在于接口设计的问题,接口过多,在一个线程调用接口之间,可能有其他线程也进行了操作。,虽然不会产生未定义行为,但这种对同一值处理了两次的行为更为严重,因为看起来没有任何错误,很难定位 bug。访问共享数据前,将数据上锁,访问结束后,在解锁。其他线程必须等待数据解锁之后,才能访问。原因在于构造返回值的时候可能抛出异常,使元素弹出了,但是未返回造成数据丢失。,在单线程中是安全的,但在多线程中,检查非空之后,创建互斥量实例,成员函数。原创 2023-09-26 20:57:33 · 199 阅读 · 0 评论 -
C++并发编程实战——第二章 线程管理
除了用函数进行构造,还可以用函数对象,也就是仿函数进行构造。函数的线程,其他线程与主线程同时运行。会退出一样,其他线程执行完也会退出。简单的启动线程,就是构造。每个程序至少有一个执行。原创 2023-09-26 20:46:08 · 62 阅读 · 0 评论 -
C++并发编程实战——第一章 你好,并发世界
【代码】C++并发编程实战——第一章 你好,并发世界。原创 2023-09-26 20:45:17 · 93 阅读 · 0 评论 -
vector的扩容机制
这篇文章将会解答一下三个问题:- 它怎么实现动态扩容的?- 它扩容时候调用的是拷贝构造还是移动构造函数?- 怎么让它调用我们的移动构造函数?原创 2023-09-25 18:27:15 · 456 阅读 · 0 评论 -
C++新特新——Lambda表达式
捕获列表](参数列表) mutable(可选) ->返回类型 {函数体捕获列表。捕获列表总是出现在Lambda表达式的开始,实际上编译器也是根据此符号判断是否是一个Lambda表达式。捕获列表可以捕捉上下文的变量也就是父作用域中的变量,供函数使用。参数列表。与正常函数一致。mutable。默认对捕获列表中的变量前会加const,加上mutable后可以修改变量。返回类型。可省略由编译器推导。原创 2023-09-17 10:22:20 · 55 阅读 · 0 评论 -
C++实现LRU页面置换算法(最近最久未使用)
【代码】C++实现LRU页面置换算法(最近最久未使用)原创 2023-09-16 19:46:27 · 464 阅读 · 0 评论 -
C++中的STL与各种容器的底层实现
STL具体分为哪几个部分?首先我是基于GNUC2.9的STL源码学习的,他和4.9还是有挺多不同的,不过对于帮助我理解标准模板库还是2.9更好。STL标准模板库主要分为六个部分:最重要的三个是容器、算法、迭代器。另外三个是分配器、仿函数和适配器。2.9的STL主要运用的是泛型编程的思想,它和我们的面向对象还是有些许不同的,面向对象最重要的思想是运行时多态,而泛型编程时编译时多态,另外面向对象通常会把数据和算法放在一个对象中,而在STL中将数据和算法分开,各自实现自己,通过迭代器链接。容器:就是原创 2023-09-15 13:52:38 · 216 阅读 · 0 评论 -
C++中的内联函数与宏
内联函数与宏内联函数有什么作用?存不存在什么缺点?首先在程序运行过程中调用一个函数时,需要先将当前状态保存,将参数入栈,函数结束后出栈,恢复状态等等开销,而内联函数的作用就是节省这些开销。内联函数就是让编译器在函数调用的地方,直接将函数的代码展开,就地计算,而不是开辟栈空间调用函数,这样就可以避免函数调用的开销,但是内联函数会在每一个函数调用的地方都展开,这样也就会有很多的代码冗余,也就是会造成代码膨胀,尤其是递归的函数,会有大量内存的开销,本质上就是一个用空间换时间的手段。但是实际上我们在函数原创 2023-09-14 18:21:07 · 65 阅读 · 1 评论 -
C++11新特性——右值引用
在C++11以前是没有右值引用这个概念的,以前的引用就是左值引用,也就是引用只能引用一个左值,当你想给一个常量取别名的时候会报错,要想引用右值只能使用常量引用。而在C++11引入了右值引用,专门引用右值,用法是用两个取地址符号来获得右值的引用,右值引用是为了支持移动操作而引出的一个概念,移动操作主要的目的是避免了不必要的拷贝,提高性能。原创 2023-09-14 18:20:16 · 87 阅读 · 1 评论 -
C++中的各种关键字——const、static、extern、explicit、constexpr、volatile、mutable、auto、deltype
C++中的各种关键字const的作用const作用,总结起来就是我希望被const修饰的东西不允许更改,也就是是只读const修饰变量const修饰变量的意思就是不允许修改这个变量,也就是定义一个常量,这个常量在程序运行中不允许修改,所以const修饰变量时,必须进行初始化。const修饰变量也分为const修饰成员变量和const修饰全局变量,虽然他们在程序中都作为常量使用,但是就像刚刚所说的,本质上他们其实都是变量,所以const修饰的成员变量内存仍然是放在栈上的,而const全局变量则原创 2023-09-14 18:18:11 · 731 阅读 · 1 评论 -
智能指针——weak_ptr的原理及仿写
【代码】智能指针——weak_ptr的原理及仿写。原创 2023-09-14 18:13:31 · 411 阅读 · 1 评论 -
智能指针——shared_ptr的原理及仿写
【代码】智能指针——shared_ptr的原理及仿写。原创 2023-09-14 18:12:29 · 124 阅读 · 1 评论 -
智能指针——unique_ptr的原理及仿写
【代码】智能指针——unique_ptr的原理及仿写。原创 2023-09-14 18:10:35 · 175 阅读 · 1 评论 -
智能指针——auto_ptr原理及仿写
【代码】智能指针——auto_ptr原理及仿写。原创 2023-09-14 18:09:21 · 61 阅读 · 1 评论 -
智能指针的原理、概念及作用简述
智能指针C++中的智能指针有哪些,各自有什么作用?智能指针主要解决的是内存释放的问题,原本我们使用new申请一块自由存储区的空间时,最后都需要自己用delete回收,而C11引入了智能指针就是为了解决这个问题,它的主要原理就是将回收的程序放在智能指针的析构函数中,然后利用智能指针是创建在栈空间上的对象,他会在生命周期结束的时候有系统自动调用析构函数并回收,这样就做到了自动delete释放内存。C的智能指针具体有四种,分别是auto_ptr、unique_ptr、shared_ptr和weak_ptr原创 2023-09-14 18:08:11 · 209 阅读 · 1 评论 -
C++中的类型转换
C++中的类型转换隐式转换当一个值拷贝给另一个兼容类型的时候,隐式转换会自动进行,有编译器操作。C++面向对象的多态特性,本质就是通过父类指针实现对子类指针的封装,这其中也发生了隐式转换。除此之外,各种数值类型的转换等等,都给开发带来了不小便利。隐式转换的原则:低精度 -> 高精度,子类 -> 父类发生的条件:混合类型的运算中不同类型的赋值操作参数传递返回值传递隐式转换的风险一般在于自定义的类构造函数中,如果类的构造函数只有一个参数,编译器会默认规定这也是一个隐式的原创 2023-09-14 18:04:03 · 97 阅读 · 1 评论 -
C++ 简单内存池的设计与STL中分配器的设计
【代码】C++ 简单内存池的设计与STL中分配器的设计。原创 2023-09-14 17:59:21 · 110 阅读 · 1 评论 -
new/delete和malloc/free到底有什么区别?
【代码】new/delete和malloc/free到底有什么区别?原创 2023-09-14 17:56:38 · 75 阅读 · 1 评论 -
C++的内存布局
【代码】C++的内存布局。原创 2023-09-14 17:53:06 · 340 阅读 · 1 评论 -
C++中的内存对齐
【代码】C++中的内存对齐。原创 2023-09-14 17:44:42 · 153 阅读 · 1 评论 -
C++中的内存区域
内存区域C++内存分为5个区域,堆区、栈区、全局/静态存储区、常量存储区、代码区栈区是由编译器在需要的时候分配,也由编译器自动释放的区域。用来存放局部变量,函数参数等。存放在栈区的数据只在当前函数或者下一层函数有效,一旦函数返回了,数据就释放了。堆区这是C的说法,在C++应该说是自由存储区,只不过默认是堆区,也可能是内存池这就涉及到分配器和我们自己设置的内存管理的问题了。堆区是由new来分配内存块的,但是编译器不会管理内存块的释放,需要使用者自行delete,如果没有释放则会造成内存泄原创 2023-09-14 17:28:39 · 142 阅读 · 1 评论 -
多态与虚函数
多态与虚函数详解多态是什么多态的意思字面上理解就是一个函数名有多种形态或者说多种状态,我们可以根据需求使用对应的那种形态。多态在c++中分为静态多态和动态多态。静态多态,也可以说编译时多态,也就是在编译时就设计了多个状态,比如说模板、函数重载都是在编译时就设计好的多态。对应的动态多态也就是运行时多态,是在程序运行时才产生的多态,是通过继承和虚函数来实现的,利用指针指向不同对象,进而使函数有不同的实现,这也是程序设计模式里最重要的技巧。虚函数的实现机制在说明虚函数的实现机制前,需要先说原创 2023-09-14 17:23:12 · 99 阅读 · 1 评论