![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++源码深究
文章平均质量分 93
源码之下,了无秘密
彼 方
一名兴趣使然的程序员
展开
-
Linux系统调用SYSCALL_DEFINE详解
Linux系统调用SYSCALL_DEFINE详解Linux源码可以去这里 https://mirrors.edge.kernel.org/pub/linux/kernel/ 下载,本文是基于linux-2.6.34版本来讲解的,老版本代码比较简洁,更容易看懂。学过Linux系统编程的小伙伴应该都知道,Linux的系统调用在内核中的入口函数都是 sys_xxx ,但是如果我们拿着内核源码去搜索的话,就会发现根本找不到 sys_xxx 的函数定义,这是因为Linux的系统调用对应的函数全部都是由 SY原创 2021-07-22 08:37:35 · 4207 阅读 · 41 评论 -
C++ RTTI详解
C++ RTTI详解1、RTTI简介2、typeid详解2.1、type_info2.2、typeid识别静态类型2.3、typeid识别动态类型2.4、typeid实现原理3、dynamic_cast详解4、总结1、RTTI简介RTTI(Runtime Type Identification)是“运行时类型识别”的意思。C++引入这个机制是为了让程序在运行时能根据基类的指针或引用来获得该指针或引用所指的对象的实际类型。但是现在RTTI的类型识别已经不限于此了,它还能通过typeid操作符识别出所有的基原创 2021-07-09 08:43:07 · 18000 阅读 · 182 评论 -
深入理解C++中五种强制类型转换的使用场景
C++中五种强制类型转换解析1、C风格的强制类型转换2、C++风格的强制类型转换2.1、static_cast2.1.1、类实例转换场景使用static_cast2.1.2、没有多态的场景下使用static_cast2.1.3、具有多态的场景下使用static_cast2.2、const_cast2.3、reinterpret_cast2.4、dynamic_cast3、总结1、C风格的强制类型转换C风格的强制类型转换容易理解,不管什么类型的转换都可以直接进行转换,使用格式如下:Type b = (T原创 2021-07-03 12:59:25 · 10351 阅读 · 205 评论 -
一文读懂C++虚继承的内存模型
一文读懂C++虚继承的内存模型1、前言2、多继承存在的问题3、虚继承简介4、虚继承在标准库中的使用5、虚继承下派生类的内存布局解析6、总结1、前言C++虚继承的内存模型是一个经典的问题,其具体实现依赖于编译器,可能会出现较大差异,但原理和最终的目的是大体相同的。本文将对g++中虚继承的内存模型进行详细解析。2、多继承存在的问题C++的多继承是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。从概念上来讲这是非常简单的,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突原创 2021-06-30 21:27:24 · 10141 阅读 · 224 评论 -
C++11的std::is_same和std::decay使用与源码解析
C++11的std::is_same和std::decay源码解析1、源码准备2、使用方法2.1、std::is_same使用方法2.2、std::decay使用方法2.3、std::is_same和std::decay配合使用3、源码解析3.1、std::is_same源码解析3.2、std::decay源码解析4、总结1、源码准备本文是基于gcc-4.9.0的源代码进行分析,std::is_same和std::decay是C++11才加入标准的,所以低版本的gcc源码是没有这个的,建议选择4.9.原创 2021-06-28 20:00:04 · 3616 阅读 · 120 评论 -
一文读懂C++虚函数的内存模型
一文彻底读懂C++虚函数表的实现机制(使用GDB内存布局)1、虚函数简介2、虚函数表简介3、有继承关系的虚函数表剖析3.1、单继承无虚函数覆盖的情况3.2、单继承有虚函数覆盖的情况3.3、多重继承的情况3.4、多层继承的情况4、总结1、虚函数简介C++中有两种方式实现多态,即重载和覆盖。重载:是指允许存在多个同名函数,而这些函数的参数表不同(参数个数不同、参数类型不同或者两者都不同)。覆盖:是指子类重新定义父类的虚函数的做法,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际原创 2021-06-26 08:49:00 · 10924 阅读 · 227 评论 -
杂谈C++11一个有趣的设计——std::_Build_index_tuple
杂谈C++11一个有趣的设计——std::_Build_index_tuple1、源码准备2、使用方法3、源码解析3.1、_Index_tuple解析3.2、_Build_index_tuple解析4、总结1、源码准备本文是基于gcc-4.9.0的源代码进行分析,std::_Build_index_tuple是C++11才加入标准的,所以低版本的gcc源码是没有这个的,建议选择4.9.0或更新的版本去学习,不同版本的gcc源码差异应该不小,但是原理和设计思想的一样的,下面给出源码下载地址http:/原创 2021-06-23 19:02:50 · 3421 阅读 · 189 评论 -
C++的智能指针auto_ptr、unique_ptr源码解析
C++的智能指针auto_ptr、unqiue_ptr源码解析1、前言2、源码准备3、源码解析3.1、auto_ptr解析3.2、unqiue_ptr解3.3、unqiue_ptr的一个偏特化版本4、智能指针相关内容的总结5、总结1、前言本文仅对C++智能指针auto_ptr、unqiue_ptr源码进行解析,需要读者有一定的C++基础并且对智能指针有所了解,本文并不对智能指针的使用方法、使用场景、效率等方面进行阐述分析,这些知识需自行查阅相关书籍去了解。建议大家先看一下这篇文章《C++11的智能指原创 2021-06-22 12:09:37 · 3039 阅读 · 213 评论 -
一文读懂C++11的Lambda表达式的用法与原理
一文读懂C++11的Lambda表达式的用法与原理1、Lambda表达式简介2、Lambda表达式使用方法介绍3、Lambda表达式实现原理解析4、总结1、Lambda表达式简介Lambda表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。2、Lambda表达式使用方法介绍C原创 2021-06-20 13:30:06 · 5251 阅读 · 184 评论 -
C++11的std::function源码解析
C++11的std::function源码解析1、源码准备2、std::function简介3、源码解析3.1、std::function解析3.2、std::_Function_handler1、源码准备本文是基于gcc-4.9.0的源代码进行分析,std::function是C++11才加入标准的,所以低版本的gcc源码是没有std::function的,建议选择4.9.0或更新的版本去学习,不同版本的gcc源码差异应该不小,但是原理和设计思想的一样的,下面给出源码下载地址http://ftp.原创 2021-06-17 14:48:36 · 6094 阅读 · 172 评论 -
C++11的std::addressof源码解析
C++11的std::addressof源码解析1、源码准备2、std::addressof的简介3、std::addressof源码解析1、源码准备本文是基于gcc-4.9.0的源代码进行分析,std::addressof是C++11才加入标准的,所以低版本的gcc源码是没有这个的,建议选择4.9.0或更新的版本去学习,不同版本的gcc源码差异应该不小,但是原理和设计思想的一样的,下面给出源码下载地址http://ftp.gnu.org/gnu/gcc2、std::addressof的简介原创 2021-06-16 21:56:05 · 2818 阅读 · 107 评论 -
C++11的右值引用、移动语义(std::move)和完美转发(std::forward)详解
C++11的右值引用、移动语义(std::move)和完美转发(std::forward)详解1、源码准备2、C++11右值引用概念2.1、左值和右值2.2、右值引用3、C++11的移动语义(std::move)和完美转发(std::forward)3.1、移动语义(std::move)3.2、完美转发(std::forward)4、总结1、源码准备本文是基于gcc-4.9.0的源代码进行分析,右值引用相关内容是C++11才加入标准的,所以低版本的gcc源码是没有这些相关的内容的,建议选择4.9.0或原创 2021-05-20 22:24:37 · 6125 阅读 · 29 评论 -
C++11的std::mem_fn源码解析
C++11的std::mem_fn源码解析1、源码准备2、通过一个简单的例子来了解std::mem_fn的作用3、std::mem_fn源码解析3.1、std::mem_fn解析3.2、std::_Mem_fn解析3.3、在代码中正确使用std::_Mem_fn4、总结1、源码准备本文是基于gcc-4.9.0的源代码进行分析,std::mem_fn是C++11才加入标准的,所以低版本的gcc源码是没有std::mem_fn的,建议选择4.9.0或更新的版本去学习,不同版本的gcc源码差异应该不小,但是原创 2021-05-19 23:34:30 · 9870 阅读 · 15 评论 -
C++11的智能指针shared_ptr、weak_ptr源码解析
C++智能指针shared_ptr源码解析1、前言2、源码准备3、智能指针概念4、源码解析4.1、shared_ptr解析4.1.1、shared_ptr4.1.2、__shared_ptr4.1.3、__shared_count4.1.4、_Sp_counted_base4.1.5、_Sp_counted_ptr1、前言本文仅对C++智能指针shared_ptr、weak_ptr源码进行解析,需要读者有一定的C++基础并且对智能指针有所了解,但是本文不对智能指针的使用方法、使用场景、效率等方面进行阐述原创 2021-05-08 22:28:02 · 15261 阅读 · 21 评论 -
C++11的std::ref、std::cref源码解析
C++11的std::ref、std::cref源码解析1、源码准备2、std::ref和std::cref的作用3、std::ref相关源码解析3.1、std::ref解析3.1、std::reference_wrapper解析3.3、std::remove_cv解析3.4、std::_Reference_wrapper_base解析4、总结1、源码准备本文是基于gcc-4.9.0的源代码进行分析,std::ref和std::cref是C++11才加入标准的,所以低版本的gcc源码是没有这两个的,建原创 2021-05-09 13:28:57 · 13559 阅读 · 20 评论