- 博客(35)
- 收藏
- 关注
转载 ★★★★★图说C++对象模型:对象内存布局详解
0.前言文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局、虚表指针、虚基类指针等有深入了解的朋友可以慢慢看。本文的结论都在VS2013上得到验证。不同的编译器在内存布局的细节上可能有所不同。文章如果有解释不清、解释不通或疏漏的地方,恳请指出。1.何为C++对象模型?引用《深度探索C++对象模型》这本书中的话:有两个概念可以解释C++对象模型
2017-05-31 22:53:03 334
转载 delete 和 delete [] 的真正区别
c++中对new申请的内存的释放方式有delete和delete[]两种方式,到底这两者有什么区别呢?1.我们通常从教科书上看到这样的说明:delete 释放new分配的单个对象指针指向的内存delete[] 释放new分配的对象数组指针指向的内存那么,按照教科书的理解,我们看下下面的代码:in
2017-05-31 22:47:01 225
转载 模板显式、隐式实例化和(偏)特化、具体化的详细分析
最近看了看到了模板的特化,突然想起来上说的显式具体化、隐式具体化、特化、偏特化、具体化等概念弄得头晕脑胀,我在网上了找了好多帖子,才把概念给理清楚。一下是我把再网上找的资料整理一下。看着这么多叫法,其实就是三种。1. 显示实例化2. 隐式实例化3. 特化(=具体化)、偏特化一、实
2017-05-31 22:39:19 737
转载 C 中 static 的常见作用
C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。
2017-05-31 22:32:20 184
转载 ★★★★★c++虚函数实现机制及内存模型
前言大家都应该知道C++的精髓是虚函数吧? 虚函数带来的好处就是: 可以定义一个基类的指针, 其指向一个继承类, 当通过基类的指针去调用函数时, 可以在运行时决定该调用基类的函数还是继承类的函数. 虚函数是实现多态(动态绑定)/接口函数的基础. 可以说: 没有虚函数, C++将变得一无是处!既然是C++的精髓, 那么我们有必要了解一下她的实现方式吗? 有必要! 既然C++是从C语言
2017-05-31 21:57:59 230
转载 C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R
2017-05-31 21:51:37 175
转载 构造函数不能是虚函数
本文的主题是构造函数不能是虚函数,首先这不需要你用脑子去记,因为当你写出来虚构造函数时,编译器是能检查出来的。本文的目的是为什么构造函数不能是虚函数。首先,先看一段错误的代码,下面的代码是通不过编译阶段的。1 class A{2 public:3 virtual A(){4 this->value = 0;5 }6 private:7
2017-05-31 21:51:00 159
转载 C++中重载、重写(覆盖)和隐藏的区别
基本概念: 重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。示例:class A{public: void test(int i); void test(double i);//overload void test(int i, double j);//overload
2017-05-31 21:45:54 187
转载 malloc 背后的系统知识
面试的时候经常会被问到 malloc 的实现。从操作系统层面来说,malloc 确实是考察面试者对操作系统底层的存储管理理解的一个很好的方式,涉及到虚拟内存、分页/分段等。下面逐个细说。1. 虚拟内存首先需要知道的是程序运行起来的话需要被加载的物理内存中,具体到计算机硬件就是内存条。操作系统启动的时候先把自己加载到物理内存的固定位置(一般为底部),物理内存的其他位置就用来运行用户程
2017-05-31 20:30:08 220
转载 从汇编层面深度剖析 C++ 虚函数
虚函数是C++语言实现运行时多态的唯一手段,因此掌握C++虚函数也成为C++程序员是否合格的试金石。csdn网友所发的一篇博文《VC虚函数布局引发的问题》 从汇编角度分析了对象虚函数表的构,以及C++指针或者引用是如何利用这个表来实现运行时多态。诚然,C++虚函数的结构会因编译器不同而异,但所使用的原理是一样的。为此,本文使用linux平台下的g++编译器,试图从汇编的层面上分
2017-05-31 19:26:14 275
转载 C++实现反射机制
1.前言在实际的项目中,听到师兄说C++中用到了反射,出于好奇,就查阅相关资料,发现强大的C++本身并不支持反射,反而Java支持反射机制。当我得知这个事实时,一直唯C++马首是瞻的我,心中暗自落泪,悲叹不已。但是,C++的fans别难受,强大的C++本身不支持,但却可以让我们手动实现,真的是曲径通幽处,禅房花木深。C++是不会辜负我们对它的至死不渝的热枕与追逐。但是,说到Ja
2017-05-28 15:44:57 367
转载 linux异步IO
知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上。预先知道这些数据的位置,所以预先发起异步IO读请求。等到真正需要用到这些数据的时候,再等待异步IO完成。使用了异步IO,在发起IO请求到实际使用数据这段时间内,程序还可以继续做其他事情)。假此机会,也顺便研究了一下linux下的异步IO的实现。linux下
2017-05-28 15:04:43 266
转载 Linux I/O模型
前言 本文是笔者的第一篇博文,在这篇文章的大部分内容基于steven大神的《Unix Network Programming》。一来是对书本内容的整理与归纳。二来也是为接下来的博文奠定基础。 在实际应用中,数据操作通常分为输入和输出,那么以输入为例,在操作系统中,一个数据的输入通常分为以下两个过程:等待数据准备好.将准备好的数据从内核拷贝到用户空间
2017-05-27 21:53:52 217
转载 浅析Linux中的零拷贝技术
http://www.jianshu.com/p/fad3339e3448本文探讨Linux中主要的几种零拷贝技术以及零拷贝技术适用的场景。为了迅速建立起零拷贝的概念,我们拿一个常用的场景进行引入:引文在写一个服务端程序时(Web Server或者文件服务器),文件下载是一个基本功能。这时候服务端的任务是:将服务端主机磁盘中的文件不做修改地从已连接的socket发出去,
2017-05-27 21:38:11 763
转载 实现对象的复用——享元模式(一)
在软件系统中,有时候也会存在资源浪费的情况,例如在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高,内存属于计算机的“稀缺资源”,不应该用来“随便浪费”,那么是否存在一种技术可以用于节约内存使用空间,实现对这些相同或者相似对象的共享访问呢?答案是肯定,这种技术就是我们本章将要学习的享元模式。14.1 围棋棋子的设计
2017-05-27 21:35:25 348
转载 一种整数数据压缩存储的算法实现
对于32位的机器,INT整形占四个字节,这意味着如果我们要保存一个INT类型数据需要占用4个字节空间,但实际的情况是4个字节的空间中并非所有的空间都保存了有效的数据位,比如整数1,在内存中以0x00000001表示,实际只有最低位表示了实际数据,通过实现一个整形的压缩算法可以有效的减少存储空间的使用。1:在一个字节数据中只保存7bit有效数据,第8位作为一个INT数据是否表示完成的指示位(
2017-05-27 18:32:27 2198
转载 数据结构——bitmap
最近在看《编程珠玑》这本书。 第1章中引入了bitmap(位图)的数据结构。以前没有接触过, 抽空研究了一下,记录下来。 书中描述的情景: 1. 最多1000万个7位数电话号码(号码不重复,实际大概800万个),保存在文本中 2. 每隔一段时间要对号码进行排序 3.程序模块最多可用1M Bytes的
2017-05-27 15:26:08 368 3
转载 bitset
有些程序要处理二进制位的有序集,每个位可能包含的是0(关)或1(开)的值。位是用来保存一组项或条件的yes/no信息(有时也称标志)的简洁方法。标准库提供了bitset类使得处理位集合更容易一些。要使用bitset类就必须要包含相关的头文件。在本书提供的例子中,假设都使用了std::bitset的using声明:#include using std::bitset;3.5.
2017-05-27 14:34:17 467
转载 动态规划
动态规划中递推式的求解方法不是动态规划的本质。0. 动态规划的本质,是对问题状态的定义和状态转移方程的定义。引自维基百科dynamic programming is a method for solving a complex problem bybreaking it down into a collection of simpler subproblems.动态规划是通
2017-05-26 21:22:13 384
转载 【贪心算法】贪心算法与活动安排问题
1、贪心算法 (1)原理:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。 (2)特性:贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小
2017-05-26 20:02:36 2469
转载 ★★★★Tarjan算法详解
http://blog.csdn.net/jeryjeryjery/article/details/52829142?locationNum=4&fps=1在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly conne
2017-05-26 15:51:10 350
转载 HDU 2586 How far away ?
How far away ?Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6309 Accepted Submission(s): 2368Problem DescriptionThere are n
2017-05-25 22:06:47 163
转载 LCA 最近公共祖先-Tarjan(离线)算法的基本思路及其算法实现
首先是最近公共祖先的概念(什么是最近公共祖先?): 在一棵没有环的树上,每个节点肯定有其父亲节点和祖先节点,而最近公共祖先,就是两个节点在这棵树上深度最大的公共的祖先节点。 换句话说,就是两个点在这棵树上距离最近的公共祖先节点。 所以LCA主要是用来处理当两个点仅有唯一一条确定的最短路径时的路径。 有人可能会问:那他本身或者其父亲节点是否可以
2017-05-25 21:24:51 413
转载 Trie树介绍及实现(传统&双数组)
本博客微信公共账号:hadoop123(微信号为:hadoop-123),分享hadoop技术内幕,hadoop最新技术进展,发布hadoop相关职位和求职信息,hadoop技术交流聚会、讲座以及会议等。二维码如下:1、 概述Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。
2017-05-25 16:55:13 614
转载 关于C++中虚函数表存放位置的思考
看到了很多有意思的答案,都回答的比较好,下面贴出一些具有代表性的:Answer 1:Answer 2:我们都知道,虚函数是多态机制的基础,就是在程序在运行期根据调用的对象来判断具体调用哪个函数,现在我们来说说它的具体实现原理,主要说一下我自己的理解,如果有什么不对的地方请指正在每个包含有虚函数的类的对象的最前面(是指这个对象对象内存布局的最前面,至于为什么是最前
2017-05-25 12:05:26 302
转载 MySQL触发器使用详解
MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行。创建触发器在MySQL中,创建触发器语法如下:代码如下:CREATE TRIGGER trigger_nametrigger_timetrigger_event ON tbl_nameFOR EACH R
2017-05-22 22:31:22 223
转载 数据库SQL优化大总结
网上关于SQL优化的教程很多,但是比较杂乱。近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充。这篇文章我花费了大量的时间查找资料、修改、排版,希望大家阅读之后,感觉好的话推荐给更多的人,让更多的人看到、纠正以及补充。 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.
2017-05-19 10:38:10 160
转载 浅谈我对协程的理解
我心中的协程最近在研究网络服务框架方面的东西,发现了一个神奇的东西-协程。一句话说明什么是线程:协程是一种用户态的轻量级线程。一句话并不能完全概括协程的全部,但是起码能让我们对协程这个概念有一个基本的印象。从硬件发展来看,从最初的单核单CPU,到单核多CPU,多核多CPU,似乎已经到了极限了,但是单核CPU性能却还在不断提升。server端也在不断的发展变化。如果将程序分为
2017-05-18 20:26:52 213
转载 Python 函数参数引用(传值/传址)/copy/deepcopy
精简版:传值:被调函数局部变量改变不会影响主调函数局部变量传址:被调函数局部变量改变会影响主调函数局部变量Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值;如果是列表,字典则传址;copy使用场景:列表或字典,且内部元素为数字,字符串或元组deepcopy使用场景:列表或字典,且内部元素包含列表或字典完整版:1.传值和传址的
2017-05-13 16:21:58 714
转载 python中list的四种查找方法
Python中是有查找功能的,四种方式:in、not in、count、index,前两种方法是保留字,后两种方式是列表的方法。下面以a_list = ['a','b','c','hello'],为例作介绍:
2017-05-13 14:32:46 13719 1
转载 python中List添加、删除元素的几种方法
一、python中List添加元素的几种方法List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非你对它们进行排序或其他修改操作)。在Python中,向List添加元素,方法有如下4种方法(append(),extend(),insert(), +加号)。1. append() 追加单个元素到List的尾部,只接受一个参数,
2017-05-13 14:23:50 3610
转载 Python xrange与range的区别
range 前面小节已经说明了,range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列。比如:1>>> range(5)2[0, 1, 2, 3, 4]3>>> range(1,5)
2017-05-13 13:25:10 556
转载 数据库范式
作者:知乎用户链接:https://www.zhihu.com/question/24696366/answer/29189700来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。国内绝大多数院校用的王珊的《数据库系统概论》这本教材,某些方面并没有给出很详细很明确的解释,与实际应用联系不那么紧密,你有这样的疑问也是挺正常的。我教《数据库原理》这门
2017-05-12 20:04:03 350
转载 脏读 幻读 不可重复读
一般大家都对事务的四种隔离模式比较熟悉,从松到严依次是:- 读取未提交(Read uncommitted):处于此模式下可能会出现脏读、幻象读、不可重复读- 读取已提交(Read committed):处于此模式下可能会出现幻象读、不可重复读- 可重复读(Repeatable read):处于此模式下可能会出现幻象读- 串行(Serialize):不会出现幻象读
2017-05-12 13:33:05 741
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人