<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[crazy_programmer_p的专栏]]></title><description><![CDATA[要做菜鸟中的战斗机]]></description><link>https://blog.youkuaiyun.com/crazy_programmer_p</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; crazy_programmer_p]]></copyright><item><title><![CDATA[C++  虚函数]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39400581</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39400581</guid><author>crazy_programmer_p</author><pubDate>Fri, 19 Sep 2014 17:01:02 +0800</pubDate><description><![CDATA[C++中的虚函数的作用主要是实现了多态的机制。关于多态，简而言之就是用父类型别的指针指向其子类的实例，然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”，这是一种泛型技术。所谓泛型技术，说白了就是试图使用不变的代码来实现可变的算法。比如：模板技术，RTTI技术，虚函数技术，要么是试图做到在编译时决议，要么试图做到运行时决议。
关于虚函数的使用方法，我在这里不做过多的]]></description><category></category></item><item><title><![CDATA[FIFO 读写操作]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39302039</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39302039</guid><author>crazy_programmer_p</author><pubDate>Mon, 15 Sep 2014 23:57:04 +0800</pubDate><description><![CDATA[《Linux程序设计（第3版）》对于Linux命名管道的读写规则详解的不够详细和清楚，查了些资料，在此总结一下：
 
1.从FIFO中读取数据：
约定：如果一个进程为了从FIFO中读取数据而阻塞打开了FIFO，那么称该进程内的读操作为设置了阻塞标志的读操作。
（1）如果有进程写打开FIFO，且当前FIFO为空，则对于设置了阻塞标志的读操作来说，将一直阻塞下去，直到有数据可以读时才继续执行；]]></description><category></category></item><item><title><![CDATA[Linux access  函数]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39300333</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39300333</guid><author>crazy_programmer_p</author><pubDate>Mon, 15 Sep 2014 23:12:30 +0800</pubDate><description><![CDATA[Linux access函数功能描述： 检查调用进程是否可以对指定的文件执行某种操作。
Linux access函数用法： 

#include 
#include 
int access(const char *pathname, int mode);
Linux access函数参数： 
pathname: 需要测试的文件路径名。 
mode: 需要测试的操作模式，可能值是一个]]></description><category></category></item><item><title><![CDATA[僵尸进程与孤儿进程]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39255429</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39255429</guid><author>crazy_programmer_p</author><pubDate>Sat, 13 Sep 2014 21:18:58 +0800</pubDate><description><![CDATA[1 .基本概念

我们知道在unix/linux中，正常情况下，子进程是通过父进程创建的，子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后，它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。
　　孤儿进程：一个父进程退出，而它的一个或多个子进程还在运行，那么那些子进]]></description><category></category></item><item><title><![CDATA[operator new]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39207979</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39207979</guid><author>crazy_programmer_p</author><pubDate>Thu, 11 Sep 2014 16:31:54 +0800</pubDate><description><![CDATA[本文主要讲述C++ new运算符和operator new, placement new之间的种种关联，new的底层实现，以及operator new的重载和一些在内存池，STL中的应用。
一 new运算符和operator new()：
     new：指我们在C++里通常用到的运算符，比如A* a = new A;  对于new来说，有new和::new之分，前者位于std
     ]]></description><category></category></item><item><title><![CDATA[C++ 关键字typeid 运行时类型检查]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39207521</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39207521</guid><author>crazy_programmer_p</author><pubDate>Thu, 11 Sep 2014 16:03:41 +0800</pubDate><description><![CDATA[在揭开typeid神秘面纱之前，我们先来了解一下RTTI（Run-Time Type Identification，运行时类型识别），它使程序能够获取由基指针或引用所指向的对象的实际派生类型，即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++中，为了支持RTTI提供了两个操作符：dynamic_cast和typeid。
    dynam]]></description><category></category></item><item><title><![CDATA[Linux 程序设计 文件锁]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39187083</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39187083</guid><author>crazy_programmer_p</author><pubDate>Wed, 10 Sep 2014 21:31:31 +0800</pubDate><description><![CDATA[功能描述：根据文件描述词来操作文件的特性。

#include 
#include  
int fcntl(int fd, int cmd); 
int fcntl(int fd, int cmd, long arg); 
int fcntl(int fd, int cmd, struct flock *lock);

[描述]
fcntl()针对(文件)描述符提供控制。参数fd]]></description><category></category></item><item><title><![CDATA[高斯混合模型]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39156315</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39156315</guid><author>crazy_programmer_p</author><pubDate>Tue, 09 Sep 2014 15:04:19 +0800</pubDate><description><![CDATA[本文就高斯混合模型（GMM,Gaussian Mixture Model）参数如何确立这个问题，详细讲解期望最大化（EM,Expectation Maximization）算法的实施过程。
单高斯分布模型GSM
多维变量X服从高斯分布时，它的概率密度函数PDF为：

x是维度为d的列向量，u是模型期望，Σ是模型方差。在实际应用中u通常用样本均值来代替，Σ通常用样本方差来代替。很容易判断一个]]></description><category></category></item><item><title><![CDATA[gcc 头文件查找路径]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39059177</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39059177</guid><author>crazy_programmer_p</author><pubDate>Thu, 04 Sep 2014 20:55:31 +0800</pubDate><description><![CDATA[如果从纯粹的text文件来说，#include的作用就是搜索它后面指示的文件，并把这个文件的内容加到当前的文件中。一般我们编程时，都是包含一些与.h为后缀的头文件，但是它可以包含任何后缀的任何形式的text文件的，而不仅仅是.h为后缀的头文件。
#include有两种形式，例如如下：
#include 
#include "userhead.h"
用尖括号表示的是包含系统的头文件，用双引号]]></description><category></category></item><item><title><![CDATA[C++ 重载  覆盖和隐藏]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39033595</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/39033595</guid><author>crazy_programmer_p</author><pubDate>Wed, 03 Sep 2014 21:42:36 +0800</pubDate><description><![CDATA[#include "stdafx.h"
　　#include 

　　class CB
　　{
　　public:
 　　　　void f(int)
 　　　　{
 　　　　　　 cout << "CB::f(int)" << endl;
　　　　 }

　　};


　　class CD : public CB
　　{
　　public:
　　　　 void f(int,int)
 　　　　{
]]></description><category></category></item><item><title><![CDATA[为什么静态成员函数不能是const]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38904581</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38904581</guid><author>crazy_programmer_p</author><pubDate>Thu, 28 Aug 2014 21:24:55 +0800</pubDate><description><![CDATA[static在c++中的第五种含义：用static修饰不访问非静态数据成员的类成员函数。这意味着一个静态成员函数只能访问它的参数、类的静态数据成员和全局变量。

   不能用const的原因：     这是C++的规则，const修饰符用于表示函数不能修改成员变量的值，该函数必须是含有this指针的类成员函数，函数调用方式为thiscall，而类中的static函数本质上是全局函数，调用规约是]]></description><category></category></item><item><title><![CDATA[各种特殊函数为什么不能是虚函数]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38904281</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38904281</guid><author>crazy_programmer_p</author><pubDate>Thu, 28 Aug 2014 21:13:21 +0800</pubDate><description><![CDATA[> 内联函数

内联函数是在编译时期展开,而虚函数的特性是运行时才动态联编,所以两者矛盾,不能定义内联函数为虚函数。

2> 构造函数

构造函数用来创建一个新的对象,而虚函数的运行是建立在对象的基础上,在构造函数执行时,对象尚未形成,所以不能将构造函数定义为虚函数。

3> 静态成员函数

静态成员函数属于一个类而非某一对象,没有this指针,它无法进行对象的判别。

]]></description><category></category></item><item><title><![CDATA[虚函数初始化顺序]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38903335</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38903335</guid><author>crazy_programmer_p</author><pubDate>Thu, 28 Aug 2014 20:37:07 +0800</pubDate><description><![CDATA[class
Bed : virtual
public furniture
{
public:
    Bed(
int nWeight ):furniture(nWeight)
    {
        cout <<
"床的构造" 
    }
    void
sleep()
    {
 
    }
};
 
//构造顺序，先是虚基类
//再是非虚基]]></description><category></category></item><item><title><![CDATA[C++对象创建过程]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38903051</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38903051</guid><author>crazy_programmer_p</author><pubDate>Thu, 28 Aug 2014 20:16:49 +0800</pubDate><description><![CDATA[初看到这个题目，你可能会有些疑惑：C++类对象的创建还有什么好说的，不就是调用构造函数么？实际上情况并不是想象中的那么简单，大量的细节被隐藏或者被忽略了，而这些细节又是解决一些其他问题的关键，所以我们很有必要深入到这块"神秘"的区域，去探索鲜为人知的秘密。
分配空间(Allocation)
创建C++类对象的第一步就是为其分配内存空间。对于全局对象，静态对象以及分配在栈区域内的对象，对它们的内]]></description><category></category></item><item><title><![CDATA[构造函数不能是虚函数的原因]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38902887</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38902887</guid><author>crazy_programmer_p</author><pubDate>Thu, 28 Aug 2014 20:06:04 +0800</pubDate><description><![CDATA[1，从存储空间角度

    虚函数对应一个vtable，这大家都知道，可是这个vtable其实是存储在对象的内存空间的。问题出来了，如果构造函数是虚的，就需要通过 vtable来调用，可是对象还没有实例化，也就是内存空间还没有，无法找到vtable，所以构造函数不能是虚函数。

2，从使用角度

        虚函数主要用于在信息不全的情况下，能使重载的函数得到对应的调用。构造函数]]></description><category></category></item><item><title><![CDATA[C 语言的可变参数类型    stdarg]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38804135</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38804135</guid><author>crazy_programmer_p</author><pubDate>Sun, 24 Aug 2014 23:31:04 +0800</pubDate><description><![CDATA[va_list/va_start/va_arg/va_end这几个宏，都是用于函数的可变参数的。]]></description><category></category></item><item><title><![CDATA[malloc (0)]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38740451</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38740451</guid><author>crazy_programmer_p</author><pubDate>Thu, 21 Aug 2014 22:59:42 +0800</pubDate><description><![CDATA[下面的代码片段输出是什么？为什么？]]></description><category></category></item><item><title><![CDATA[字长 寻址]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38737549</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38737549</guid><author>crazy_programmer_p</author><pubDate>Thu, 21 Aug 2014 21:57:12 +0800</pubDate><description><![CDATA[我们通常说的64位技术是相对于32位而言的，这个位数指的是CPU GPRs(General-Purpose Registers，通用寄存器)的数据宽度为64位，64位指令集就是运行64位数据的指令，也就是说处理器一次可以运行64bit数据。

通用寄存器：
  通用寄存器可用于传送和暂存数据，也可参与算术逻辑运算，并保存运算结果。除此之外，它们还各自具有一些特殊功能。通用寄存器的长度取决于机]]></description><category></category></item><item><title><![CDATA[操作系统内存管理之内部碎片 与外部碎片]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38704573</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38704573</guid><author>crazy_programmer_p</author><pubDate>Wed, 20 Aug 2014 12:51:09 +0800</pubDate><description><![CDATA[“碎片的内存”描述一个系统中所有不可用的空闲内存。这些资源之所以仍然未被使用，是因为负责分配内存的分配器使这些内存无法使用。这一问题通常都会发生，原因在于空闲内存以小而不连续方式出现在不同的位置。由于分 配方法决定内存碎片是否是一个问题，因此内存分配器在保证空闲资源可用性方面扮演着重要的角色。



internal fragmentation:when memory allocated ]]></description><category></category></item><item><title><![CDATA[C++ hash_map]]></title><link>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38685913</link><guid>https://blog.youkuaiyun.com/crazy_programmer_p/article/details/38685913</guid><author>crazy_programmer_p</author><pubDate>Tue, 19 Aug 2014 18:12:12 +0800</pubDate><description><![CDATA[为什么需要hash_map 
用过map吧？map提供一个很常用的功能，那就是提供key-value的存储和查找功能。例如，我要记录一个人名和相应的存储，而且随时增加，要快速查找和修改： 

岳不群－华山派掌门人，人称君子剑 
张三丰－武当掌门人，太极拳创始人 
东方不败－第一高手，葵花宝典]]></description><category></category></item></channel></rss>