
C++
文章平均质量分 82
神技圈子
八年以上对象存储、分布式文件存储开发老兵。曾在多家存储大厂(华为,腾讯等)担任过存储开发专家。LeetCode讲师、Apache Doris contributor
展开
-
GlusterFS源码讲解:如何实现最终一致性
对GlusterFS如何实现最终一致性进行了源码讲解原创 2025-02-07 22:14:35 · 992 阅读 · 0 评论 -
一文带你看懂DPDK内存管理
本文深入探讨了 DPDK(Data Plane Development Kit)的内存管理机制及其对高性能数据包处理的优势原创 2024-10-19 16:43:24 · 733 阅读 · 0 评论 -
一文教你如何基于c++11 实现线程池(附完整代码)
本文详细讲解了如何利用C++11来实现一个线程池原创 2024-08-28 15:55:43 · 899 阅读 · 0 评论 -
如何自己设计一个重入锁
详细讲解了重入锁的应用场景、使用以及如何自定义一个重入锁原创 2024-08-05 16:10:02 · 521 阅读 · 0 评论 -
【网易面试题】如何实现一个线程安全的shared_ptr智能指针
题目描述网易一面遇到过这么一个题目,面试官要求自己实现一个线程安全的shared_ptr智能指针。题目分析可能很多人只知道shared_ptr是C++11模块库的头文件定义的一个智能指针,即shared_ptr模版。只要将new运算符返回的指针交给shared_ptr这个“管家”,就不必担心在哪里没有delete p了。shared_ptr在被删除的时候会自动执行delete p。通过 shared_ptr 的构造函数,可以让 shared_ptr 对象托管一个 new 运算符返回的指针,写法如下:原创 2021-12-16 14:54:28 · 2425 阅读 · 5 评论 -
带你玩转多进程编程(一)
前言之前用加法器的例子一文带你轻松掌握多种范式讲解了多种范式的封装差异得到了很多童鞋的阅读。这次我再通过对进程的封装来给大家继续加深讲解下关于这几种编程范式的差异吧。结构化设计相对于pthread_create()函数,fork函数要弱一些。不过不要紧我们马上把它加强一下。#include <iostream>#include <sys/types.h>#include <unistd.h>#include <stdlib.h>using n原创 2021-12-12 22:08:45 · 1107 阅读 · 2 评论 -
多进程中之文件描述符继承的消除
什么是文件描述符的继承 当父进程创建子进程时,无论 fork 函数或者是 vfork 函数,子进程通常都会继承父进程的文件描述符。所谓的继承,就是子进程可以使用相同的文件描述符,和父进程操作同一个文件对象。如图所示 这种可能会造成权限安全隐患。怎么办呢? 最简单的做法当然就是什么也不做。告诉开发人员,父子进程之间这种共享文件对象的方式很危险,你自己开着办,除了事情自己负责,当然这种处理方式,对于执行体程序库而言代价最小,因为不用添加任何代码,顶多在文档上写两句说明的...原创 2021-02-07 10:05:25 · 5604 阅读 · 1 评论 -
一文带你轻松掌握多种编程范式
前言编程范式有多种,主要有结构化的程序设计思想、对于对象的程序设计思想、面向对象的程序设计思想、基于接口的程序设计思想。那么这些范式各是什么意思呢?别着急,我们通过一个加法器的例子来逐一说明。结构化程序的设计思想我们来实现一个加法器,在这个加法器中已经保存了被加数,现在需要传递加数到加法器。如果你是一个C语言开发,第一反应多半是,这个很简单啊,用一个结构体来保存被加数,然后再外带一个加法函数就行了啊代码中,结构体Augend保存了加法器的被加数,具体而言,就是由iAugend保存,第9至12行给出原创 2020-12-14 14:15:45 · 30858 阅读 · 48 评论 -
通过反汇编来理解restrict关键字
一次面试后对retrict关键字的理解一次难忘的面试经历什么是restrict功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入一次难忘的面试经历多年前,一次鹅厂实习生的面试题,题目的代码片段很简单,如下: 1 #includ原创 2020-10-20 23:16:29 · 687 阅读 · 0 评论 -
C++ Boost智能指针的使用总结
boost库智能指针使用详解概述scope_ptr特点用法scope_array特点用法shared_ptr特点weak_ptrintrusive_ptr概述C++没有提供类似JAVA的垃圾回收机制,因此boost通过智能指针用来管理内存避免一些问题。C++继承 C 高效灵活地指针,但是同样带了了很多问题:1.内存泄露2.野指针3.越界访问虽然STL提供了auto_ptr,但是由于不能...原创 2019-07-17 23:11:22 · 3932 阅读 · 0 评论 -
通过参数-fno-elide-constructors关闭g++的编译优化
前两天在做讲课资料的时候遇到一个比较坑的问题。一般来说调用拷贝构造函数分三种情况1.当用类一个对象去初始化另一个对象时。2.如果函数形参是类对象。3.如果函数返回值是类对象,函数执行完成返回调用时。道理很简单,我写了个很简单的例子在fun函数中会返回一个class A的对象,那么编译器会在栈上构造一个临时对象,构造临时对象的方法则是调用拷贝构造函数结果运行后,如下...原创 2019-04-06 00:43:36 · 5495 阅读 · 0 评论 -
flex&bison之注册表解析
flex&bison简介flex是GNU开发的一个实用工具,它主要用于对语言进行词法分析。使用flex,我们不需要使用像C/C++,Java这样的语言从设计状态机开始编写词法分析器,而只需要按照flex自己的语法编写分词规则文件,然后使用flex编译该文件,flex会根据规则文件生成C/C++源文件,这个源文件中包含了状态机的代码,简化了编写词法分析器的工作。flex的前身...原创 2019-03-17 21:27:38 · 2225 阅读 · 0 评论 -
C++ 编译器什么时候会帮助创建拷贝构造函数
前提:当用户没有创建拷贝构造函数1.Memberwise初始化 逐个给成员变量赋值,这是最常见的拷贝方式。2.Bitwise Copy属性 当Class具有Bitwise Copy属性时,直接用memcpy内存拷贝,此时编译器不会合成拷贝构造函数。总之,只要Class不具备Bitwise Copy属性,编译器就会合成拷贝构造函数。没有Bitwise Co...原创 2019-03-06 11:53:25 · 3052 阅读 · 0 评论 -
C++ 虚函数表及多态内部原理详解(三)
(三)多重继承(无虚函数覆盖)下面我们再看看多重继承的情况 对于子类实例中的虚函数表,是下面这个样子: 从图上我们可以看到1)每个父类都有自己的虚表。2) 子类的成员函数被放到了第一个父类的表...原创 2019-02-26 21:48:02 · 6052 阅读 · 1 评论 -
C++ 虚函数表及多态内部原理详解(二)
实在不好意思,这几天有事没有及时更新。下面继续(二)一般继承(有虚函数覆盖)如果子类中有虚函数重载了父类的虚函数,会是一个什么样子?假设,我们有下面这样的一个继承关系。如图所示: 在这个类的设计中,只覆盖了父类的一个函数:f()。那么,对于派生类的实例,其虚...原创 2019-02-26 21:33:29 · 3561 阅读 · 0 评论 -
C++ 虚函数表及多态内部原理详解(一)
C++中 的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术 可以让父类的指针有“多种形态”,这是一种泛型技术。虚函数表每个含有虚函数的类都有一个虚函数表(Virtual Table)来实现的。简称为V-Table。C++的编译器应该是保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证...原创 2019-02-24 00:24:14 · 6011 阅读 · 2 评论 -
C++中Bitwise Copy带来的问题实例讲解
在对象拷贝过程中,如果没有显示定义默认拷贝构造函数和默认赋值构造函数,编译器会提供相应的缺省函数,该函数是"按位"进行拷贝或者赋值。对于只含有POD成员数据的简单类,bitwise copy方式绰绰有余。但是倘若类比较复杂,类成员中包含有指针、引用、虚函数时会出现错误。 以类A为例,类A定义如下图所示 假设创建对象a1,a2,a2通过a1拷贝,要是未定义默认拷贝构造...原创 2019-02-16 11:48:42 · 4533 阅读 · 0 评论