<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[IT_Linux]]></title><description><![CDATA[转载原创文章请注明出处(志存高远&&立足现实)]]></description><link>https://blog.youkuaiyun.com/IT_PCode</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; IT_PCode]]></copyright><item><title><![CDATA[boost智能指针之shared_ptr和weak_ptr]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/43266281</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/43266281</guid><author>IT_PCode</author><pubDate>Thu, 29 Jan 2015 09:09:07 +0800</pubDate><description><![CDATA[std::auto_ptr很多的时候并不能满足我们的要求，比如auto_ptr不能用作STL容器的元素。boost的smart_ptr中提供了4种智能指针和2种智能指针数组来作为std::auto_ptr的补充。  
shared_ptr：使用shared_ptr进行对象的生存期自动管理，使得分享资源所有权变得有效且安全.
weak_ptr：weak_ptr 是 shared_ptr 的观察员]]></description><category></category></item><item><title><![CDATA[boost.any实现任意类型存储]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/42774813</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/42774813</guid><author>IT_PCode</author><pubDate>Fri, 16 Jan 2015 11:23:59 +0800</pubDate><description><![CDATA[当你需要一个可变的类型时，有三种可能的解决方案：

无限制的类型，如 void*. 这种方法不可能是类型安全的，应该象逃避灾难一样避免它。可变的类型，即支持多种类型的存储和获取的类型。支持转换的类型，如字符串类型与整数类型之间的转换。
Any实现了第二种方案，一个基于值的可变化的类型，无限可能的类型。这个库通常用于把不同类型的东西存储到标准库的容器中。

Any 库如何改进你的程序
任]]></description><category></category></item><item><title><![CDATA[C++智能指针之auto_ptr]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/42705445</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/42705445</guid><author>IT_PCode</author><pubDate>Wed, 14 Jan 2015 09:33:31 +0800</pubDate><description><![CDATA[1. auto_ptr
auto_ptr 是C++标准库提供的类模板，auto_ptr对象通过初始化指向由new创建的动态内存，它是这块内存的拥有者，一块内存不能同时被分给两个拥有者。当auto_ptr对象生命周期结束时，其析构函数会将auto_ptr对象拥有的动态内存自动释放。即使发生异常，通过异常的栈展开过程也能将动态内存释放。auto_ptr不支持new
 数组。

2. auto_]]></description><category></category></item><item><title><![CDATA[RTTI和类型转换]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/42679791</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/42679791</guid><author>IT_PCode</author><pubDate>Tue, 13 Jan 2015 18:06:08 +0800</pubDate><description><![CDATA[RTTI


通过运行时类型识别（RTTI），程序能够使用基类的指针或引用来检索这些指针或引用所指对象的实际派生类型。通过下面两个操作符提供
 RTTI：

1. typeid 操作符，返回指针或引用所指对象的实际类型。
2. dynamic_cast 操作符，将基类类型的指针或引用安全地转换为派生类型的指针或引用。

这些操作符只为带有一个或多个虚函数的类返回动态类型信息，对于]]></description><category></category></item><item><title><![CDATA[操作符重载之解引用与箭头操作符]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/42679757</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/42679757</guid><author>IT_PCode</author><pubDate>Tue, 13 Jan 2015 18:02:17 +0800</pubDate><description><![CDATA[箭头操作符与众不同。它可能表现得像二元操作符一样：接受一个对象和一个成员名，对对象解引用以获取成员。不管外表如何，箭头操作符不接受显式形参。这里没有第二个形参，因为 -> 的右操作数不是表达式，相反，是对应着类成员的一个标识符。没有明显可行的途径将一个标识符作为形参传递给函数，相反，由编译器处理获取成员的工作。

理解1
当这样编写时:point->action();由于优先级规则，它实际等]]></description><category></category></item><item><title><![CDATA[自旋锁详解]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/24807549</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/24807549</guid><author>IT_PCode</author><pubDate>Wed, 30 Apr 2014 18:04:05 +0800</pubDate><description><![CDATA[自旋锁

自旋锁（spinlock）是用在多个CPU系统中的锁机制，当一个CPU正访问自旋锁保护的临界区时，临界区将被锁上，其他需要访问此临界区的CPU只能忙等待，直到前面的CPU已访问完临界区，将临界区开锁。自旋锁上锁后让等待线程进行忙等待而不是睡眠阻塞，而信号量是让等待线程睡眠阻塞。自旋锁的忙等待浪费了处理器的时间，但时间通常很短，在1毫秒以下。

自旋锁用于多个CPU系统中，在单处理]]></description><category></category></item><item><title><![CDATA[自旋锁透彻分析]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/24807363</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/24807363</guid><author>IT_PCode</author><pubDate>Wed, 30 Apr 2014 18:00:07 +0800</pubDate><description><![CDATA[自旋锁与互斥锁有点类似，只是自旋锁不会引起调用者睡眠，如果自旋锁已经被别的执行单元保持，调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁，"自旋"一词就是因此而得名。
　　由于自旋锁使用者一般保持锁时间非常短，因此选择自旋而不是睡眠是非常必要的，自旋锁的效率远高于互斥锁。
　　信号量和读写信号量适合于保持时间较长的情况，它们会导致调用者睡眠，因此只能在进程上下文使用（_trylock的]]></description><category></category></item><item><title><![CDATA[存储性能瓶颈的成因、定位与排查]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/24807153</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/24807153</guid><author>IT_PCode</author><pubDate>Wed, 30 Apr 2014 17:56:14 +0800</pubDate><description><![CDATA[介绍

企业数据存储性能瓶颈常常会发生在端口，控制器和磁盘，难点在于找出引起拥塞的单元，往往需要应用多重工具以及丰富的经验来查找并解决。
本文详细阐述存储瓶颈发生最常见的四种情况，可能发生的拥塞点，需要监控的参数指标，以及部署存储系统的最佳实践。

更多信息

数据存储瓶颈的四个常见场景：
以下是储瓶颈发生最常见的四种典型情况：
1.
当多个用户同时访问某一业务应用，无论是邮件]]></description><category></category></item><item><title><![CDATA[结构体中的指针与零长度数组]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/24802719</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/24802719</guid><author>IT_PCode</author><pubDate>Wed, 30 Apr 2014 17:30:21 +0800</pubDate><description><![CDATA[0长度的数组在ISO C和C++的规格说明书中是不允许的,但是由于gcc 预先支持C99的这种玩法，所以，“零长度数组”在gcc环境下是合法的。
先看下面两个例子。
pzeroLengthArray.c
#include 

struct str
{
	int len;
	char *s;
};

struct foo
{
	struct str *a;
};

int main()
{]]></description><category></category></item><item><title><![CDATA[整型溢出问题]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/24396913</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/24396913</guid><author>IT_PCode</author><pubDate>Thu, 24 Apr 2014 10:29:25 +0800</pubDate><description><![CDATA[整型溢出问题是常见问题，通过下面的例子去品味整型溢出的“乐趣”吧。
#include 
/*
对于unsigned整型溢出，C的规范是有定义的——“溢出后的数会以2^(8*sizeof(type))作模运算”，也就是说，如果一个gned char（1字符，8bits）溢出了，会把溢出的值与256求模。
对于signed整型的溢出，C的规范定义是“undefined behavior”，也就是说，]]></description><category></category></item><item><title><![CDATA[C语言谜题解析]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/23869691</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/23869691</guid><author>IT_PCode</author><pubDate>Wed, 16 Apr 2014 19:39:30 +0800</pubDate><description><![CDATA[本文汇总了一些容易犯错、不易察觉的C编程错误。有时候，你会遇到莫名其妙的错误而不知所措，本文中的一些例子可以给你提供经验，防患于未然。宏
#include 
#define f(a,b) a##b
#define g(a)   #a
#define h(a) g(a)

int main()
{
        printf("%s\n", h(f(1,2)));
        printf("%s\n", g(f(1,2)));
        return 0;
}
说]]></description><category></category></item><item><title><![CDATA[查看进程内存映像命令pmap]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/23780575</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/23780575</guid><author>IT_PCode</author><pubDate>Tue, 15 Apr 2014 19:05:23 +0800</pubDate><description><![CDATA[名称：
       pmap - report memory map of a process(查看进程的内存映像信息)
用法
       pmap [ -x | -d ] [ -q ] pids...
       pmap -V
选项含义
       -x   extended       Show the extended format. 显示扩展格式
       -d]]></description><category></category></item><item><title><![CDATA[跟踪进程栈命令pstack]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/23779811</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/23779811</guid><author>IT_PCode</author><pubDate>Tue, 15 Apr 2014 18:55:39 +0800</pubDate><description><![CDATA[pstack 命令必须由相应进程的属主或 root 运行，可显示每个进程的栈跟踪，可以使用 pstack 来确定进程挂起的位置。此命令允许使用的唯一选项是要检查的进程的 PID。
 
示例
写了一个程序，sleep挂起，查看进程PID，用pstack查看，结果如下
[root@SPA ~]# ps aux | grep test
root      2901  0.0  0.0   378]]></description><category></category></item><item><title><![CDATA[Linux程序调试利器ltrace]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/23775297</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/23775297</guid><author>IT_PCode</author><pubDate>Tue, 15 Apr 2014 17:43:57 +0800</pubDate><description><![CDATA[作用
 
ltrace命令用来跟踪进程调用库函数的情况
 
调用
 
ltrace  [-CdfhiLrStttV]  [-a  column] [-e expr] [-l filename] [-n nr] [-o filename] [-p pid] ... [-s strsize] [-u username] [-X extern] [-x extern]
       ...]]></description><category></category></item><item><title><![CDATA[Linux程序调试利器strace]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/23774399</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/23774399</guid><author>IT_PCode</author><pubDate>Tue, 15 Apr 2014 17:29:24 +0800</pubDate><description><![CDATA[调用
strace  [ -dffhiqrtttTvxx ] [ -acolumn ] [ -eexpr ] ...  [ -ofile ] [ -ppid ] ...  [ -sstrsize ] [ -uusername ] [ -Evar=val ] ...  [ -Evar ] ...  [ command [ arg ...  ] ]
strace -c [ -eexpr ] ...]]></description><category></category></item><item><title><![CDATA[来自腾讯无线研发的经验分享]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/23763175</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/23763175</guid><author>IT_PCode</author><pubDate>Tue, 15 Apr 2014 15:31:25 +0800</pubDate><description><![CDATA[在2014年4月11日的腾讯分享日活动上， 来自腾讯MIG的移动互联网事业群运营总监/T4专家，负责运营QQ手机浏览器、腾讯PC浏览器、腾讯手机安全管家、腾讯电脑管家产品的刘昕介绍了移动无线产品研发中的“一秒钟法则”。本文根据该演讲内容整理形成。
移动互联网的一个很大问题在于无线网络跟以前的有线网络不一样，无论是网络的组织形态、架构、通讯机制，跟有线网络都有很大差异，这带来很多挑战。今天介绍的“]]></description><category></category></item><item><title><![CDATA[洗牌算法分析总结]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/23529421</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/23529421</guid><author>IT_PCode</author><pubDate>Sat, 12 Apr 2014 14:10:22 +0800</pubDate><description><![CDATA[先定义出一个基本概念：究竟洗牌算法的本质是什么？也就是说，什么样的洗牌结果是“正确”的？一个比较确切的定义，在经过洗牌函数后，如果能够保证每一个数据出现在所有位置的概率是相等的，那么这种算法是符合要求的。在这个前提下，尽量降低时间复杂度和空间复杂度就能得到好的算法。

第一个算法：
随机抽出一张牌，检查这张牌是否被抽取过，如果已经被抽取过，则重新抽取，直到找到没被抽出过的牌，然后把这张牌放入]]></description><category></category></item><item><title><![CDATA[C语言实现全排列]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/23373277</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/23373277</guid><author>IT_PCode</author><pubDate>Thu, 10 Apr 2014 18:44:57 +0800</pubDate><description><![CDATA[全排列是将一组数按一定顺序进行排列，如果这组数有n个，那么全排列数为n!个；为了用递归的方式实现全排列，我们将整组数中的所有的数分别与第一个数交换，然后总是处理后n-1个数的全排列。
 
#include 

int count = 0;

void swap(int *a, int *b)
{
     int tmp = 0;
     tmp = *a;
     *a = *b;]]></description><category></category></item><item><title><![CDATA[查找某个路径下的大文件并删除]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/23360027</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/23360027</guid><author>IT_PCode</author><pubDate>Thu, 10 Apr 2014 15:50:07 +0800</pubDate><description><![CDATA[在项目中，升级时发现磁盘空间已满，此时，必须得删除无用的，占用空间较大的文件。
删除前，得找到那些满足一定大小的文件
 
查找根目录下大于5000KB的文件
find / -type f -size +50000k]]></description><category></category></item><item><title><![CDATA[git的安装与使用入门]]></title><link>https://blog.youkuaiyun.com/IT_PCode/article/details/23341649</link><guid>https://blog.youkuaiyun.com/IT_PCode/article/details/23341649</guid><author>IT_PCode</author><pubDate>Thu, 10 Apr 2014 11:22:53 +0800</pubDate><description><![CDATA[最近看到一个内核注释的代码，想下载下来瞄一下，可，这代码是用git存储管理的，没办法，只能在自己的虚拟机上弄了。试用了下git，达到了我的目的。
使用yum安装git
[root@localhost install-pngynghay]# yum install git-core
Loaded plugins: fastestmirror, refresh-packagekit, secur]]></description><category></category></item></channel></rss>