随笔分类 -  C++数据结构

摘要:内存池的实现和管理(一) 内存池的实现和管理(二) 前面两篇博客主要介绍了内存池的原理和实现,这篇博客主要是介绍如何优化多线程安全的内存池 内存池的实现和管理(二)中内存池的实现代码存在的问题 虽然在内存申请和释放的时候,使用lock_guard()实现了多线程安全的内存池,但是频繁的加锁和解锁带来 阅读全文
posted @ 2020-12-15 15:54 知道了呀~ 阅读(1326) 评论(0) 推荐(0) 编辑
摘要:转载自 https://www.cnblogs.com/zhangbaochong/p/5879263.html c++11中有互斥和条件变量但是并没有信号量,但是利用互斥和条件变量很容易就能实现信号量。 1.信号量 信号量是一个整数 count,提供两个原子(atom,不可分割)操作:P 操作和 阅读全文
posted @ 2020-08-19 21:59 知道了呀~ 阅读(2448) 评论(0) 推荐(1) 编辑
摘要:转载自https://blog.csdn.net/wlx990074575/article/details/108005854 c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如 1、你可以把一个指向const对象的指针转换成指向非const对象的指针 阅读全文
posted @ 2020-08-16 20:33 知道了呀~ 阅读(3766) 评论(0) 推荐(0) 编辑
摘要:什么是迭代器 迭代器提供了一种方法,使它能够按照顺序访问某个容器所含的各个元素,但无需暴露该容器的内部结构,换句话说迭代器就是指针的简单包装,通过一个模板类封装的对象 迭代器的失效问题 一、迭代器在vector、deque等内存连续的容器删除中失效 对于序列式容器,比如vector,删除当前的ite 阅读全文
posted @ 2020-08-13 11:12 知道了呀~ 阅读(3872) 评论(0) 推荐(4) 编辑
摘要:什么是异步 异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回.实现异步可以采用多线程技术或则交给另外的进程来处理 异步的优缺点 1、在设计良好的情况下,可以不是使用或减少共享变量的使用,减少了死锁的可能 2、编写异步操作的复杂度高,使用回调函数处理难以调试 异步与多线程 异步与多线程 阅读全文
posted @ 2020-08-12 20:14 知道了呀~ 阅读(994) 评论(0) 推荐(0) 编辑
摘要:一、什么是布隆过滤器 布隆过滤器是一种数据结构,主要是通过位图+多个哈希函数来实现对一个 数据 的标记 作用是在大量数据中,判断给定的一个 数据 是否存在 二、哈希表与布隆过滤器 哈希表也可以对一个数据进行标记,然后可以起到判断是否存在的作用,并且标记和判断的时间复杂度都为O(1),布隆过滤器有啥优 阅读全文
posted @ 2020-08-08 22:18 知道了呀~ 阅读(623) 评论(0) 推荐(0) 编辑
摘要:1、位图(Bitmap)简介 位图是一种非常常见的结构,它使用每个二进制位来存放一个值的状态,正因为这个性质,它经常被用在数据压缩或者是索引等方面。 有这样一道题:给40亿个不重复的无符号整数,没有经过排序,然后再给一个树,如何快速判断这个数是否在40亿个数之中?在这里如果我们实打实的存放40亿个数 阅读全文
posted @ 2020-08-08 21:23 知道了呀~ 阅读(2269) 评论(0) 推荐(0) 编辑
摘要:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 一、普通函数和回调函数 普通的函 阅读全文
posted @ 2020-08-03 14:37 知道了呀~ 阅读(1632) 评论(0) 推荐(0) 编辑
摘要:一、memcpy和memove void* memove(void*destin , void* source, size_t count) { //进行这样的判断是为了解决拷贝重叠的情况 if (destin > source) { //这里拷贝的时候还可以提高效率 //因为CPU单次可以拷贝的最 阅读全文
posted @ 2020-08-02 20:47 知道了呀~ 阅读(652) 评论(0) 推荐(0) 编辑
摘要:先介绍三个函数 一、pthread_setafftinity_np 在Linux上,我们可以使用pthread特定的pthread_setafftinity_np函数。通过设置其亲和性将每个线程固定到单个CPU //设置CPU亲和度,为0表示设置成功,非0值表示失败 int rc =pthread_ 阅读全文
posted @ 2020-07-28 10:11 知道了呀~ 阅读(2881) 评论(0) 推荐(1) 编辑
摘要:一、Windows创建多线程的方法有CreadThread()和_beginthreadex()函数,Win32 提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通信等工作,头文件在 #include<windows.h> 先介绍一下CreateThread()主要的函数列表 Crea 阅读全文
posted @ 2020-07-27 19:31 知道了呀~ 阅读(5519) 评论(0) 推荐(1) 编辑
摘要:参考博客: https://www.cnblogs.com/mysky007/p/12310667.html https://www.cnblogs.com/muhe221/articles/5049474.html 阅读全文
posted @ 2020-07-18 17:12 知道了呀~ 阅读(574) 评论(0) 推荐(0) 编辑
摘要:Linux下使用两个进程,交替控制输出1-10之间的数 #include<iostream> using namespace std; #include <unistd.h> #include <cstdio> #include <cstring> #include <stdlib.h> #incl 阅读全文
posted @ 2020-07-13 11:08 知道了呀~ 阅读(533) 评论(0) 推荐(0) 编辑
摘要:看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。 const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。 const 是constant 的缩写,“恒定不变”的意思。被c 阅读全文
posted @ 2020-07-11 09:50 知道了呀~ 阅读(480) 评论(0) 推荐(0) 编辑
摘要:C++一般类的内存分布 一下都是在x64下进行的编译 1、空类 2、无继承、无虚函数类 3、无继承、有虚函数类 4、有继承、有虚函数类 C++继承类的内存分布 C++多重继承时的内存分布 #include <iostream> using namespace std; class A { publi 阅读全文
posted @ 2020-07-04 11:07 知道了呀~ 阅读(1146) 评论(4) 推荐(0) 编辑
摘要:在派生类中对基类成员访问应该是唯一的,但是在多继承时,可能会导致对基类某成员访问出现不一致的情况,这就是C++多继承中的二义性。 有两种继承的情况会产生多义性 一、 如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的成员变量进行访问时,可能产生二义性,继承关系如下图所示 阅读全文
posted @ 2020-06-22 10:40 知道了呀~ 阅读(1394) 评论(0) 推荐(0) 编辑
摘要:static变量的使用详解:https://blog.csdn.net/lq18811566072/article/details/82047637 一、static 修饰全局变量,限制了该变量的作用域为当前文件,就是说他能在当前文件中作为全局变量被访问,但不能再其他文件中被访问,这里static是 阅读全文
posted @ 2020-06-01 21:22 知道了呀~ 阅读(1357) 评论(0) 推荐(0) 编辑
摘要:一、什么是写时拷贝 写入时复制是一种计算机程序设计领域的优化策略。其核心思想是,如果有多个调用者同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本给该调用者,而其他调用者所见到的最初的资源仍然保持不变 阅读全文
posted @ 2020-06-01 18:14 知道了呀~ 阅读(1145) 评论(0) 推荐(0) 编辑
摘要:#include<iostream> #include<thread> #include<mutex> #include<atomic> using namespace std; mutex g_mutex; atomic<bool> isok = false; void func(int id) 阅读全文
posted @ 2020-05-28 18:55 知道了呀~ 阅读(274) 评论(0) 推荐(0) 编辑
摘要:在许多时候,我们会有这样的需求——即我们想要得到线程返回的值。但是在C++11 多线程中我们注意到,std::thread对象会忽略顶层函数的返回值。 那问题来了,我们要怎么获得线程的返回值呢? 我们通过一个例子来说明如何实现这个需求。用多个线程计算(a+b)/ (x+y) 的值 有两种方法,分别是 阅读全文
posted @ 2020-05-28 18:27 知道了呀~ 阅读(6184) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示