C/C++
小灰马
爱生活,爱读书,爱挑战!
展开
-
红黑树源码实现
继上一篇《思考红黑树》 自己亲自动手把红黑树实现一遍,发现理论成功了要转换为实际代码还是有点难度的,困难点主要在于一些边界点的确定。还是需要进一步提高自己的C功力。直接贴代码吧,有需要的拿去用,我自己也留着以后拿来玩玩。这份代码肯定是需要根据实际环境进行修改的,前两天大概扫了一下 《Linux内核中的红黑树》里面的代码,发现自己写的代码水平跟大神写的还是有些差距啊...加油吧。原创 2013-08-24 12:22:50 · 1161 阅读 · 0 评论 -
[温故而知新] 《深度探索c++对象模型》——构造函数
前言: 由于平时工作时候大部分时间写Java,虽然之前画了不少时间学习C++,很长时间不写,回头要写,又发现很多东西又手生了,这里做个总结备忘,顺便把C++的一些东西和java比较。c++相对于c,编译器干了好多事,而理解c++关键的点,就是理解么编译器帮我们做了什么事,以及为什么做这些事。1.默认构造函数 default constructor 首先理解什么是默认构造函数? 我目前的理解,设原创 2015-11-04 21:54:44 · 572 阅读 · 0 评论 -
[温故而知新] 《深度探索c++对象模型》——对象数据成员的内存布局
前言侯捷把书中第三章翻译为 “Data语意学”,另外书中有些语句得读几遍才明白他什么意思,也许是不习惯台湾的一些语言习惯。本文做一些简单的梳理。了解对象数据成员的布局前,先了解一个语法相关的点:对member functions 的函数体的分析,会直到整个class的声明都出现了才开始,而对于 member functions 的参数列表 却是在第一次遭遇时适当地决议(resolved)。 1原创 2015-11-14 19:45:18 · 613 阅读 · 0 评论 -
[温故而知新] 《深度探索c++对象模型》——对象方法成员
本节的复杂点,在于对virtual function的支持上。一、先从简单的几种function入手1.non member function 2.static member function 3.non static member function第一种是最常见的 non member funcion://在一个地方定义returnValue functionName(argumentLis原创 2015-11-28 21:38:03 · 579 阅读 · 0 评论 -
[温故而知新] 《深度探索c++对象模型》——运行期语意
这张东西有点少,就写6条…1. copy assignment operator在虚拟继承情况下行为不佳,有可能多次调用,比如说在一个菱形结构中。2. 数组的定义,每个数组里的元素的构造和析构也跟之前的一样需要进行。数组里的元素按默认构造进行初始化。3. new操作符int *pi = new int(5);//分两步进行int *pi;if( pi = __new(sizeof(int)) )原创 2016-04-12 00:47:40 · 441 阅读 · 0 评论 -
[温故而知新] 《深度探索c++对象模型》——站在对象模型的尖端
前言终于到最后一章啦,准备迎接新的篇章,刚好“霹雳布袋戏”要出新的剧集了,期待ing。这章也是一些零散的知识点。1. 模版的名称决议直接上代码://scope of the template definitionextern double foo(double);template < class type >class ScopeRules{public: void invariant原创 2016-04-13 22:55:40 · 606 阅读 · 0 评论 -
[温故而知新] 《深度探索c++对象模型》——构造、析构、拷贝的语义
前言base class 的virtual或者 pure virtual 虚析构函数需要实现C的pure virtual function 可以有body两种初始化方式的效率比较虚拟继承下virtual base class 的构造在构造函数中调用虚函数赋值操作符前言好久没写博,已经好几个月花在为公司的项目填坑上,最近稍微能抽出点时间来写啦。这一章的知识点相对零散,书也翻译得乱七八糟的。原创 2016-04-11 01:08:21 · 655 阅读 · 0 评论 -
[温故而知新] 《Linux/Unix系统编程手册》——文件I/O
本文对文件IO这一块做一些梳理,记录思考的一些问题和一些待解决的问题,后续会继续更新。 I hear and I forget,I see and I remember,I do and I understand.Part 1 :通用IO/**相关头文件:<fcntl.h><unistd.h>文件IO的几个系统调用fd = open(pathname, flags, mode)原创 2016-10-23 19:41:13 · 1726 阅读 · 0 评论 -
计算两路径的相对路径
需求:给定绝对路径A和绝对路径B,计算B相对于A的路径,例如A=/srv/test/ , B=/srv/foo/bar ,则结果为 ../foo/bar 。思路:把A和B中具有相同的前面部分全部去掉,A中剩下的部分,有几个目录就替换为几个 ../ ,再把结果拼上 B的剩余部分就是结果。从PHP手册看到有人写的一个函数:<?php function relativePath($f原创 2013-08-06 13:09:51 · 975 阅读 · 1 评论 -
反汇编之函数调用
首先提出2个问题:1.函数调用时,参数是怎样传递的?2.函数调用时,函数内部的局部变量和函数的参数在栈中是如何布局的?参考资料:1.AT&T与Intel汇编语言的比较2.C++反汇编代码分析–函数调用3.栈溢出4.常见寄存器名称及其作用目前得出的结论:1.从函数A中调用函数B之前,如果参数少的话(少于cpu一些可用的通用寄存器个数)则会把参数放到寄存器里原创 2013-08-01 21:26:00 · 2125 阅读 · 0 评论 -
简单的多线程流水线模型(一)
流水线这个概念应该比较好理解,如一个工厂里,有一堆原料 --> 工人1加工 --> 工人2加工 --> 工人3加工 --> ... ->形成最终的产品。下面写个简单的流水线实现的模型。以工人2为例分析工人的整个工作过程:循环开始: a.等待工人1的输入,要是工人1没输入,工人2就趴在工作台上睡觉。 b.工人1有输出给工人2,发现工人2此时在睡觉呢,空闲着呢,因此工原创 2013-04-12 18:17:21 · 4129 阅读 · 2 评论 -
简单的多线程流水线模型(二)
续上一篇《简单的多线程流水线模型(一)》下面我们创建三个工人 Lucy,Lily,Lilei,他们干的活就是接收输入的秒数input,把睡眠input秒,然后把input-1丢给下一个工人。这里做一下小结:流水线模型的优缺点。优点:一环扣一环,确保事情按顺序一个一个干完。缺点:流水线的某个环节如果处理速度慢的话,会影响上游的整个流水线,所以流水线的瓶颈应该是花时间最多的那个环节原创 2013-04-12 19:21:23 · 1792 阅读 · 0 评论 -
PHP源码分析之启动过程
文章还没远远没写完,因为发现整个启动过程涉及太多东西了,慢慢写~慢慢更新...------------------------------------------------------------------------------------------------------------------------ PHP可以以多种方式运行,例如作为apache一个模块mod_原创 2013-04-28 18:55:27 · 2051 阅读 · 0 评论 -
PHP源码分析之线程安全模型
欢迎转载,转载请注明出处http://blog.csdn.net/hackooo/article/details/8702156 谢谢!新浪微博:小灰马 0.前言 相信很多人跟我一样,一开始看PHP源码的时候看到一堆的TSRM_CC,TSRM_DC特别蛋疼,大多数函数的声明都会在参数末尾加个TSRM_DC,着实让像我这样以前没搞过多线程编程的很不理解。网上找了找,介绍原创 2013-04-27 16:25:08 · 3019 阅读 · 1 评论 -
PHP源码分析之内存管理
欢迎转载,转载请注明出处http://blog.csdn.net/hackooo/article/details/8702156 谢谢!新浪微博:小灰马主要内容1.源码阅读2.动态内存分配之边界标识法3.PHP内存管理浅析1.源码阅读http://lxr.php.netcscopecscope 是一个 C 语言的浏览工具,通过这个工具可以很方便地原创 2013-03-21 17:46:53 · 2323 阅读 · 8 评论 -
迷宫求解
前言最近复习一下数据结构,发现一个有趣的迷宫求解问题,当时就没去做,现在来玩玩这个问题。迷宫问题的简单描述:给定一个迷宫,给定一个起点和终点,找到从起点到终点的一条可行路径。《数据结构(C语言版)》书中的图如下:解决思路:1.把上面的迷宫转换为一个二维矩阵,用0表示空白,1表示障碍。2.从起点开始,用逐步探测的方法寻找路径 从当前的位置开始探测,按顺时针原创 2013-06-08 19:37:43 · 1294 阅读 · 0 评论 -
字母大小写转换
好久没写博了,准备继续搞起。今天先写个简单的,字母的大小写转换。问题1:给定一个字符串“asDFghj”,把它全部转为大写字母或者小写字母。这问题是不是太简单了点,现有的各种函数库里面都有什么strtoupper()、strtolower()之类的转换函数。自己手写一个呢?这让我想起以前上机实验写C程序的时候做过这个题。好吧,先写下当时我是怎么做的: void s原创 2013-07-19 15:04:05 · 1073 阅读 · 0 评论 -
[温故而知新] 关于C++的引用
好久没写博,平时都是把笔记写在有道云笔记里,最近国庆,克服懒癌来写写。距离上次写博,都快半年了,以后要勤快点了。话说霹雳布袋戏又要出新剧集了。进入正题,写这篇文章的原因之前看过几本C++的书,只记得C++的引用只是个所谓的“别名”,但是总感觉这东西很奇怪,当时也没具体去深究它,最近在看一本金山的一个哥们写的《深入应用C++ 11》,里面在聊到右值引用的时候,对引用有一句描述: 无论声明左值引用还原创 2016-10-05 20:56:46 · 520 阅读 · 0 评论