随笔分类 -  基础语言-->C++

摘要:多线程实践 整理自陈硕大大的 多线程网络编程 ,大佬真的牛 对象池 说明:factory里面保存者对象,对象用ID标识,当相同I/D请求则把当前对象池对象返回,如果对象不被任何地方使用对象要被析构 版本1: template<typename T> class FastFactory { publi 阅读全文
posted @ 2021-06-27 22:35 make_wheels 阅读(316) 评论(0) 推荐(0)
摘要:整理自 陈硕的多线程网络编程 面试问题 : c++中都有什么样的内存问题,怎么解决 缓冲区溢出,访问了错误空间 使用容器,vector或者array,直接成员函数获取长度,不要自己裸指针,用基本数组 悬空指针 野指针 使用shared_ptr,保证只要用到的地方就是可用的 重复释放 使用shared 阅读全文
posted @ 2021-06-27 18:29 make_wheels 阅读(98) 评论(0) 推荐(0)
摘要:参考 陈硕 Linux多线程服务编程 java并发编程实战 多线程的历史 早期单核裸机CPU 程序只能顺序执行,一次只能运行一个程序,造成的就是资源浪费和难编写代码 单核CPU + 操作系统(进程) 操作系统的出现让计算机可以运行多个程序,这也就是并发。操作系统引入进程的概念,让每个程序在自己进程中 阅读全文
posted @ 2021-06-26 23:01 make_wheels 阅读(176) 评论(0) 推荐(0)
摘要:参考 Effective_C++第三版.pdf Effective_Modern_C__.pdf 描述 类似于托管的方式来解决几个问题: 减少编译时间 解决循环引用 屏蔽内部实现 减少编译时间,本质降低依赖 ​ 因为c++是静态编译语言,他看的就是文件和文件之间的依赖,如果是实例 type a,那么 阅读全文
posted @ 2021-06-20 19:20 make_wheels 阅读(7376) 评论(2) 推荐(3)
摘要:make_unique在c++11里面没有引入,但是你可以自己写一个 template <typename T, typename ...Args> std::unique_ptr<T> make_unique(Args&& ...args) { return unique_ptr<T>(new T 阅读全文
posted @ 2021-06-14 23:04 make_wheels 阅读(1759) 评论(0) 推荐(0)
摘要:前提 ​ 好的你现在已经知道了unique_ptr和shared_ptr两种指针,使用确保指针的独享,shared_ptr确保指针的共享,那么weak_ptr是干嘛的? 作用 ​ 既然shared_ptr是内部包含引用计数的强引用,那么有这样需求: 不对资源进行 管理,但是可以使用这个堆对象机能 可 阅读全文
posted @ 2021-06-14 21:26 make_wheels 阅读(229) 评论(0) 推荐(0)
摘要:作用 ​ 以值的方式对堆内存进行独占管理 ​ 占用空间大小和裸指针几乎相同,在调用指针函数的时候也和裸指针相同 ​ 默认情况下,对于内裹指针是通过delete来释放内存的 通用的使用场景 自己写一个make_unique的 比如make_unique template <typename T, ty 阅读全文
posted @ 2021-06-09 12:51 make_wheels 阅读(194) 评论(0) 推荐(0)
摘要:免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除。 原文作者:作者 原文地址:地址 C++编译器优化技术:RVO、NRVO和复制省略 现代编译器缺省会使用RVO(return value optimization,返回值优化)、NRVO(named ret 阅读全文
posted @ 2021-05-27 13:11 make_wheels 阅读(454) 评论(0) 推荐(0)
摘要:参考 https://blog.csdn.net/lxk2017/article/details/102779042 https://blog.csdn.net/liuyi1207164339/article/details/50827608 仅仅作为记录 深入理解快排 ​ 首先说一下核心点: ​ 阅读全文
posted @ 2021-05-26 17:41 make_wheels 阅读(178) 评论(0) 推荐(0)
摘要:头文件 ​ #include 获得当前时间函数 查看源码得知 /* Time used by the program so far (user time + system time). The result / CLOCKS_PER_SECOND is program time in seconds 阅读全文
posted @ 2021-05-26 09:56 make_wheels 阅读(258) 评论(0) 推荐(0)
摘要:move vs forward 摘抄 c++ primer第五版,书真的好,所有的东西在里面都能找到 模板实参推断和引用 通用的规则:const是 底层的,不是顶层的。就是说 只要函数参数或者 类型有const最终推导出的就有const 从左值引用函数传参推断类型 对于 template<typen 阅读全文
posted @ 2021-05-25 17:12 make_wheels 阅读(111) 评论(0) 推荐(0)
摘要:remove 和 erase 1. 说明 remove是独立于类型的函数 erase在各个容器中有对应实现 remove只能把 所有待删除的元素进行移动,但是不能更改实际大小(也没法更改,他无法知道是什么容器以及容器内部legnth也无法更改),返回一个指向待删除元素的迭代器 erase指定一个迭代 阅读全文
posted @ 2021-05-23 21:15 make_wheels 阅读(268) 评论(0) 推荐(0)
摘要:参考 (2条消息) 为什么多线程读写 shared_ptr 要加锁?_陈硕的Blog-CSDN博客 (2条消息) C++11使用make_shared的优势和劣势_yagerfgcs的博客-CSDN博客_makeshared (2条消息) C++11新特性之十:enable_shared_from_ 阅读全文
posted @ 2021-05-23 20:44 make_wheels 阅读(4750) 评论(0) 推荐(0)
摘要:说明 ​ 不同类型的数据在内存中按照一定的顺序排列,不一定是顺序的一个一个接着排列 ​ 常见的我们定义结构体,结构体大小就不仅仅是每个成员占用大小之和 为什么需要内存对齐 ​ CPU对内存的读取不是连续的,而是分块读取的,块的大小只能是 1、2、4、8 、16字节 ​ 当读取操作的数据未对齐,则需要 阅读全文
posted @ 2021-05-05 21:53 make_wheels 阅读(149) 评论(0) 推荐(0)
摘要:问题 1. 有 extern static int fun() 这种写法么? 2. extern int fun() 和 int func() 有区别吗 3. static函数的汇编和普通函数汇编的区别 4. static函数 是在编译的哪一个步骤,让其他想使用该函数的地方报错 5. static 阅读全文
posted @ 2021-03-09 13:49 make_wheels 阅读(215) 评论(0) 推荐(0)
摘要:整理自这篇文档,好文档 1. c++11之前引入多线程的方式 ​ 通过引入线程库的方式,一般是Pthread库的方式引入线程库,注意的是编译器并不知道有线程的存在,编程语言也不知道,仅仅库支持线程的一些操作,这种方式脱离语言不保证语言的安全性 2. Pthread标准 1. 应用程序应该确保一个或者 阅读全文
posted @ 2021-01-25 22:52 make_wheels 阅读(119) 评论(0) 推荐(0)
摘要:摘抄自这里 原文请看这里 位域说明 struct bs{ unsigned m; unsigned n: 4; unsigned char ch: 6; } 说明: 使用: 后面加上数字的形式,限定变量占用的bit数目,不指定:, 默认为类型的bit 上面中m未指定位数所以是 4Byte,n是4bi 阅读全文
posted @ 2021-01-24 22:01 make_wheels 阅读(256) 评论(0) 推荐(0)
摘要:以下使用GNU89的标准 1.内联的定义: 内联就是一个关键字inline加载函数定义处,告诉编译器在编译的时候请对这个函数调用的地方进行内联调用(这里说的请,编译器可以拒绝这个操作因为内联函数的失败) 2.内联函数的作用 内联是为了节约函数的调用开销而诞生的,我们在调用一个普通函数的时候,存在的额 阅读全文
posted @ 2020-12-08 22:57 make_wheels 阅读(1999) 评论(0) 推荐(1)
摘要:c的宏 1. 前提 ​ 除非有必要使用宏(本质预编译期间进行宏展开),否则: ​ 如果是 变量可以使用 const或者枚举常量代替 ​ 如果是 函数可以使用内敛来代替,只要适合宏函数的一般都适合内联函数 2. 宏的应用类型的使用 1. 宏变量 #define N 100 在预编译将使用N的地方替换为 阅读全文
posted @ 2020-08-03 23:19 make_wheels 阅读(111) 评论(0) 推荐(0)
摘要:##问题 int a[2][3];//定义2 * 3的数组,2是行,3是列 int a[2][3] = {{1,2,3}, {4,5,6}}; const char* a[3] = {"1", "2", "3"};//定义二维数组,3是修饰行的,前面的指针修饰每一个具体的列,指针修饰的是一维 con 阅读全文
posted @ 2020-06-15 12:06 make_wheels