
C++
文章平均质量分 79
LupinLeo
这个作者很懒,什么都没留下…
展开
-
C++多态,虚函数,虚函数表
@TOC原创 2019-05-06 23:26:51 · 990 阅读 · 1 评论 -
Linux条件变量pthread_condition细节(为何先加锁,pthread_cond_wait为何先解锁,返回时又加锁)
一览本文目的为何需要条件变量三个问题传入前锁mutex传入后解锁mutex返回前再次锁mutex尾语本文目的 首先说明,本文重点不在怎么用条件变量。这里我先列出 apue 中对于pthread_cond_wait函数的这么一段话:“ 调用者把锁住的互斥量传给函数,函数然后自动把调用线程放到等待条件的线程列表上,**对互斥量解锁。**这就关闭了条件检查和线程进入休眠状态等待...原创 2019-05-06 09:42:50 · 11422 阅读 · 12 评论 -
c++多态,为何只能通过指针或引用实现
一览本文目的内存切割尾语本文目的 在c++的多态中,如果一个基类的虚函数被派生类重写,那么把基类的指针指向派生类,就能够通过基类调用被派生类重写的这个虚函数。(对于这点有疑问的,可以看我之前写的C++多态,虚函数,虚函数表,gcc下的单继承,多继承,虚继承的内存布局)。那么如果不用指针或引用会如何? class Animal{ public: ...原创 2019-05-06 23:26:02 · 8808 阅读 · 6 评论 -
C++在gcc下的单继承,多继承,虚继承的内存布局
一览本文目的gcc下不同继承方式的存储模型单继承单继承无重写:单继承重写多重继承多继承无重写:多继承重写:虚继承多重继承无法解决的模型真正的菱形继承尾语本文目的 最近看了《深入探索c++对象模型》,被其中关于虚函数的各种继承的内存结构,绕来绕去,十分纠结。并且在《深入探索c++对象模型》这本书中的的各种结构是大体的策略,可以用来理解,但是gcc编译器中的具体实现比较详细。而网...原创 2019-06-12 16:54:01 · 2837 阅读 · 3 评论 -
C++内存分配粗略概览
一览本文目的内存分配体系尾语本文目的 在C++内存分配方面,会见到很多操作:new、delete、new[]、delete[]、operator new、 operator delete、malloc、 free、 STL里的 allocator、deallocator,甚至linux内核中的 slab allocator、kmalloc、vmalloc。内存分配体系&...原创 2019-06-06 17:37:00 · 226 阅读 · 0 评论 -
x86-64架构下函数调用栈与32位下的不同之处
一览本文目的x86-64下打印参数地址判断参数入栈顺序的做法不合理情况1:函数调用参数从右向左存放到寄存器,又从左到右存放到栈情况2:栈顶不增长,参数存放在栈顶之外参数多于寄存器数量,参数会入栈尾语本文目的 之前,我本想观察函数调用时,栈的细节。顺便验证一下,口口相传的,C/C++从右向左入栈。详情参考之前的文章:C++函数调用栈细节(gdb调试)结果发现了些出乎意料的情况。...原创 2019-06-19 21:44:07 · 1392 阅读 · 0 评论 -
C++函数调用栈细节(gdb调试)
一览本文目的测试代码汇编代码gdb调试遗留问题尾语本文目的 之前从其他地方看到过,调用函数时,会把下一条指令地址入栈,再把函数入栈,形参从右到左入栈,出栈顺序相反。但是自己一直也没有观察过。所以本文在gcc5.4下,通过GDB调试,把函数调用时的汇编指令的执行,以及相应寄存器的变换展示出来。这样不光对函数调用的细节更清楚,也能熟悉GDB调试的一些功能。ps:本文调试图片较多。...原创 2019-06-16 20:50:37 · 1278 阅读 · 0 评论 -
调用private/protected修饰的虚函数
一览本文目的代码不可行的直接调用可行的指针调用尾语本文目的 前些天面试,被问到一个很有意思的问题:c++中能否调用protected修饰的虚函数,之前没有尝试过,所以只能靠直觉回答:“在技术上,只要知道虚函数表的地址就可以调用,但是不清楚protected保护的机制是具体在哪一个时期起的作用,可能需要一些手段来绕开这个机制。” 我的回答就是这样(自我感觉回答的还是含糊不清楚,...原创 2019-08-04 15:16:31 · 1587 阅读 · 0 评论 -
dynamic_cast的几种情况
一览本文目的基类有虚函数基类无虚函数尾语本文目的 最近秋招看到一个有意思的问题,对一个没有虚函数的对象使用dynamic_cast会发生什么情况。想一想平时基本没用过dynamic_cast,于是干脆写点代码验证一下各种情况。首先验证对有虚函数的基类的指针和引用(2种情况),指向基类本身和其派生类(2种情况),一共四种情况的结果。然后验证基类没有虚函数时的这四种情况。基类...原创 2019-08-05 18:38:40 · 1851 阅读 · 0 评论