自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (9)
  • 收藏
  • 关注

原创 TBB(intel threading building blocks)内存分配算法(一)

TBB(intel threading building blocks)内存分配算法(一)开篇:最近研究了一下TBB的内存分配算法,发现设计的非常优雅,故和大家分析一下它的算法思想。 既然是开篇,那么我们就先从最基本的入手来看一下TBB基于Cache对齐的内存管理算法。首先来明确几个概念。 cache: 现代的cpu都引入的cache的概念,即cpu在参与运算时并非每次都去内存中取得数据的

2012-02-25 15:33:23 500

原创 多线程伪共享(false sharing)问题分析

多线程伪共享(false sharing)问题分析在多核的CPU架构中,每一个核心core都会有自己的缓存空间,因此如果一个变量如果同时存在不同的核心缓存空间时,就会出现伪共享(false sharing)的问题。 此时如果一个核心修改了该变量,该修改需要同步到其它核心的缓存。 在linux执行cat /proc/cpuinfo 来查看cpu的缓存的行大小: cache_alignment

2012-02-25 15:32:55 363

原创 判断是否为欧拉图的并行算法

判断是否为欧拉图的并行算法欧拉图: 一个图为欧拉图,当且公当有一条回路经过图的每一条边且恰好经过一次。 欧拉定理表明:一个图为欧拉图,当且仅当不含有奇度数的顶。 假设图G大小为M * N和邻接矩阵A。 判断一个图是否为欧拉图,很容易在O(M*N)的时间内完成。 为了说明方便,下面设M = N 下面给出复杂度为O(Log(N)) 并行算法,注意这里只给出理论上可行的算法。 1. 计算每个点.

2012-02-25 15:32:30 842

原创 一个简单问题的并行算法

一个简单问题的并行算法设一个数列S[N], 其中S[0] = 0; S[k] = S[k - 1] + k ( 1 对于这个问题的求解串行算法相当简单,O(N)时间复杂度,不再解释。 并行: 假设有 M 个线程, 其中 M S[K] = S[K - 1] + K = S[K - 2] + K - 1 + K = S[K - 3] + K - 2 + K - 1 + k ... = S[K.

2012-02-25 15:32:08 324

原创 矩阵乘法的并行算法

矩阵乘法的并行算法设两个矩阵A和B,大小分别为M * N 和 N * P, 如果C = A * B, 则C的大小为M * P。 矩阵算法的算法表示,伪代码如下: for (i = 0; i < M; ++i){ for (j = 0; j < P; ++j){ C[i][j] = 0; for (k = 0; k < N; ++k){ C[i][j] += A[i][k] * B[k][j

2012-02-25 15:31:36 828

原创 设计一个不能被复制的类

设计一个不能被复制的类在C++中如果要求一个类能被复制需要实现赋值运算符或者复制构造函数,因此要想一个类不能被复杂,只需将这两个函数设置private访问属性即可class NoCopy{ public: NoCopy(){} private : NoCopy(const NoCopy & copy){} NoCopy & operator = (const NoCopy & copy){

2012-02-25 15:31:13 342

原创 C/C++/CPP中与虚拟存储器(指针)有关错误汇总(二)

C/C++/CPP中与虚拟存储器(指针)有关错误汇总(二)首先参考 C/C++/CPP中与虚拟存储器(指针)有关错误汇总(一) 6. 错误指针地址运算 指针的算法运算是以他们指向对象的大小为单位来进行运算的,例如整形指针pval, 如果求当前指针指针整数的下一个整数只需要int * pnext = pval + 1,很多对指针不熟悉的人可能会int *pNext = pVal + size

2012-02-25 15:30:44 201

原创 C/C++/CPP中与虚拟存储器(指针)有关错误汇总(一)

C/C++/CPP中与虚拟存储器(指针)有关错误汇总(一)一, 指针引用错误。 现代操作系统中普通使用虚拟存储器系统,使得每个进程可以使用的地址空间达到2^N,N为机器的位数,但是实际中并不需要如此大的内存,所以如果间接将引用的指针指向一块没有使用的内存空间中,操作系统会会报出segment error错误。 int val; scanf("%d" , val);很明显上面scanf的使用

2012-02-25 15:30:17 207

原创 cpp不区分大小写比较字符串string

cpp不区分大小写比较字符串stringint StrCaseCmp(const string & stra , const string & strb) { int aLen = stra.length(); int bLen = strb.length(); int iRes = 0 , iPos = 0; for (iPos = 0; iPos < aLen && iPos < bL

2012-02-25 15:29:54 683

原创 一句话搞定string类型大小写转换之transform用法

一句话搞定string类型大小写转换之transform用法对于cpp中的string类型大小写转换用的可以说非常频繁,下面是使用STL实现的一种非常简单的方式进行转换 std::transform (strExt.begin(), strExt.end(), strExt.begin(), ::toupper ); //将strExt转换成大写。 其实transform的用法非常广泛,下

2012-02-25 15:29:13 306

原创 编写标准的字符串复制(strcpy)函数

编写标准的字符串复制(strcpy)函数C++中strcpy函数定义在string.h库中,其标准形式如下: char *strcpy(char *dest, const char *src); 可以实现如下: char *strcpy(char *dest, const char *src) { assert(dest != NULL && src != NULL); //对参数合法性进

2012-02-25 15:28:46 331

原创 设计一个不能被继承的类

设计一个不能被继承的类在c++中每个类都一个构造函数和一个析构函数,即使用户不明确定义,系统也会类定义一个默认的构造函数和析构函数。当创建该类的对象可以显示或者隐式调用构造函数,当对象销毁时会自动调用析构函数。 当有子类继承父类,创建子类的对象时,会自动调用父类的构造函数,同样当对象销毁时也会自动调用父类的析构函数。 在类属性中private不允许用户和子类调用该函数的方法。 因此要想使用

2012-02-25 15:28:21 201

转载 有序数组合并的并行算法(有一定限制)

有序数组合并的并行算法(有一定限制)如果A=(a1,a2,...,am)和B=(b1,b2,...,bn)是两个有序的升序数组,合并数组A和B就行形成一个新的升序数组包含A和B的有所有元素,假设A=(2,4,11,12,14,35,95,99),B=(6,7,9,25,26,31,42,85,87,102,105). 如果合并A和B的数组,串行算法会遍历两个数组,然后将数组元素存到数组C中

2012-02-19 10:36:11 258

转载 指针数组/数组指针

指针数组/数组指针C/C++中有两个非常容易混淆的十分常用的但是又特别不引起人注意的两个概念,指针数组和数组指针,或许你已经对这两个概念早有耳闻,但是不知你有没有对他们做过细致的分析来区别二者呢?参考:  QQ架构的讨论(整理)参考:  cpp程序性能优化参考:  矩阵乘法的并行算法参考:  指针数组/数组指针参考:  腾讯游戏的矩阵效应参考

2012-02-19 10:35:29 275

转载 指针和Map 指针和Map

指针和Map怎么样,看下来有点眼花缭乱吧,究竟这个pMap里面存放的是什么呢?为了搞清楚这个问题,我们还是要从指针入手。 搞清楚什么是指针,指针里存放的是什么内容指针是指向一块内存中的存储区域,指针中存放的是段内存的开始地址, 是一个整形数据,占用4个字节,搞清楚这点后,对pMap或许应该有一个清楚的认识。参考:  布隆过滤器在网页去重中的应用参考:  C++ 中 vect

2012-02-19 10:35:00 776

转载 C++ 中 vector 如何实现内存分配

C++ 中 vector 如何实现内存分配为了支持随机访问,vector中的元素采用顺序存放,即每一个元素紧挨着前一个元素进行存储。那么现在只有可能出现问题了,当内存中没有足够连续的空间去存放新插入来的元素怎么办,C++是这样处理的:重新分配内存空间,将原来旧的元素全部复制到新的存储空间中去,然后再插入新的元素。因此可以看出,如果内存不是特别充足或者内存中没有较大块的空闲空间的,向vect

2012-02-19 10:34:35 402

转载 腾讯游戏的矩阵效应

腾讯游戏的矩阵效应走自己的路,让别人无路可走。”尽管互联网的英雄们在公开场合声讨腾讯已成为一种常态,但事实上,私底下却是一种复杂的心态——曾几何时,那些有野心的互联网创业家都渴望成为像腾讯一样的“全民公敌”,只是梦想照进了腾讯的现实。不难理解这种心态,在许多人看来,腾讯不过是在即时通讯领域早发力了几年而已。如果将腾讯的成功单纯归结于此,显然有失偏颇。如今的腾讯已经是一个几乎涵盖所有互联网主

2012-02-19 10:34:07 486

转载 寻找无序数组中的第K大数

寻找无序数组中的第K大数例如寻找5, 2, 6, 3中的第3大数,排好序后变为2 , 3 , 5 , 6 , 故结果为5,可以利用上述函数cout<< quicksort(x , 0 , 3 , 3)<<endl;参考:  多线程伪共享(false sharing)问题分析参考:  指针数组/数组指针参考: 有序数组合并的并行算法(有一定限制)参考:  Go

2012-02-19 10:33:39 302

转载 小量压缩简单算法

小量压缩简单算法在对文档进行倒排的时候经常涉及到对倒排文档的压缩,例如假设有单词instance 出现的文档有<1,3 ,4 , 6 ,9 ,10,... >,即倒排表以升充排列,这样我们就可以在倒排文件中只保存前后两个文档位置的差量,即转变之后结果为<1 ,2 , 1 , 2 , 3 , 1 , ...>,因此在遍历的时候可以累积得到每个文档位置。分析转变后的倒排文件我们可知 (不失一般

2012-02-19 10:32:43 219

转载 选路逻辑问题 选路逻辑问题

选路逻辑问题话说您走到一个路口,前方有两条路(P1 , P2) , 其中只有一条能通往您需要的地方。现在有A,B两人,其中一个人只说真话,另一个人只说假话,但是目前您不知哪一位会说真话。现您有一次机会来问A,或者B一个问题,注意,只能向一个人问,并且只能一个人能回答您,那么这个问题您应该怎么问呢参考:  C++内存池的实现实例参考:  TBB(intel threading

2012-02-19 10:32:06 432

转载 关于char字符移位问题

关于char字符移位问题结果是255, 0XFF!unbelievable!,为什么呢,我作一点猜想,可能是由于编译器自身的考虑,char字符在移位的时间先将char 转换成整数,自然0x80转换成整数肯定是一个负数,所以在32位整数中前面24位肯定都是1,所以右移的时候就出现了补1的问题参考:  QQ架构的讨论(整理)参考:  linux查看文件夹大小参考:  G

2012-02-19 10:31:38 338

转载 效率极低人群之七大习惯

效率极低人群之七大习惯就像寻找对你有益的习惯一样,寻找妨碍你的习惯同样重要。这7种习惯中大多数都可能会轻易成为你日常生活的一部分,使你难以察觉它的存在(或者它如何影响到你)。我曾经略微尝试了这些习惯,结果毫无疑问,那些重要的事情没有几个可以完成。同时我也要添加说明的是,这只是在生活中你可能形成的影响效率的主要的7个习惯,我很确定绝不仅仅是这些参考:  C++内存池的实现实例

2012-02-19 10:30:57 520

转载 布隆过滤器在网页去重中的应用

布隆过滤器在网页去重中的应用假设你想从网上(新浪新闻)去下载一批网页,做信息检索(搜索引擎)的第一步.你已经从网上下载下来了一批网页,并且有这批网页的URL,不过你还有一批需要下载的网页的URL, 问题是这样的,如果有些URL已经被下载过了,你就不必要再次下载了,现在让你快速的识别出哪些URL上的是还没被下载的,可以有一定的误差,但是不能超过1%参考:  寻找无序数组中的第K大数

2012-02-19 10:30:27 709

转载 C语言字符串函数大全

C语言字符串函数大全函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例:参考:  一个简单问题的并行算法参考:  QQ架构的讨论(整理)参考:  linux查看文件夹大小参考:  矩阵乘法的并行算法参考:  布隆过滤器在网页去重中的应用

2012-02-19 10:29:54 226

转载 linux查看文件夹大小

linux查看文件夹大小只查看该文件夹的大小du -h --max-depth=0 ;查看文件夹下每个文件的大小 du -h --max-depth=1 参考:  Google Protocol Buffer 的使用和原理参考:  关于char字符移位问题参考:  腾讯游戏的矩阵效应参考:  腾讯游戏的矩阵效应参考:  C语言字符串函数大全参考:

2012-02-19 10:29:26 181

转载 linux下c++多线程下统计程序运行时间(非常注意)

linux下c++多线程下统计程序运行时间(非常注意)查看一下clock()函数的功能: 这个函数返回从“开启这个程序进程”到“程序中调用C++ clock()函数”时之间的CPU时钟计时单元(clock tick)数当程序单线程或者单核心机器运行时,这种时间的统计方法是正确的。但是如果要执行的代码多个线程并发执行时就会出问题,因为最终end-begin将会是多个核心总共执行的时钟嘀嗒数,

2012-02-19 10:29:00 1283

转载 C++内存池的实现实例

C++内存池的实现实例本节分析在某个大型应用程序实际应用到的一个内存池实现,并详细讲解其使用方法与工作原理。这是一个应用于单线程环境且分配单元大小固定的内存池,一般用来为执行时会动态频繁地创建且可能会被多次创建的类对象或者结构体分配内存参考:  一个简单问题的并行算法参考:  判断是否为欧拉图的并行算法参考:  效率极低人群之七大习惯参考:  指针数组/数组

2012-02-19 10:28:30 271

转载 cpp程序性能优化

cpp程序性能优化重中之重 - 算法优化: 程序性能优化最显著的优化方法是算法上的优化,算法的优化对性能的提升往往是一个数量级的,例如排序,冒泡的时间复杂度为O(N^2),而快速排序的时间复杂度为O(Nlog(N)),这种性能的提供是非常明显的。 2. 消除冗余的循环: 我们先看一下for循环生成的汇编代码for (int N = 4.参考:  效率极低人群之七大习惯参考:

2012-02-19 10:27:54 330

转载 QQ通信协议

QQ通信协议不管UDP还是TCP,最终登陆成功之后,QQ都会有一个TCP连接来保持在线状态。这个TCP连接的远程端口一般是80,采用UDP方式登陆的时候,端口是8000。因此,假如你所在的网络开放了80端口(80端口是最常用端口。。就是通常访问Web的端口,禁掉它的话,你的网络对你来说价值已经不大了),但没有屏蔽腾讯的服务器IP,恭喜你,你是可以登陆成功QQ的。 二、聊天消息通信。 采用U

2012-02-19 10:27:19 273

转载 Google Protocol Buffer 的使用和原理

Google Protocol Buffer 的使用和原理刘 明, 软件工程师, 上海交大电子与通信系 简介: Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 AP

2012-02-19 10:26:49 443

转载 QQ架构的讨论(整理)

QQ架构的讨论(整理)转贴:QQ的架构问题 -----------sodme 大宝 hi, all: 我把第一个问题选为:QQ的架构。呵呵,题目是不是有点大?QQ现在的最高在线用户数是1900万,我们来讨论一下要作一个这样的架构如何来作更好,大家积极发言,这也是我这个周末为自己选择的思考题,呵呵。大家积极畅所欲言。 我们讨论的问题可以包括但不限于这些内容: 1.登录时的负载如何解决的 2.

2012-02-19 10:26:18 601

转载 矩阵乘法的并行算法

矩阵乘法的并行算法设两个矩阵A和B,大小分别为M * N 和 N * P, 如果C = A * B, 则C的大小为M * P。 矩阵算法的算法表示,伪代码如下: for (i = 0; i < M; ++i){ for (j = 0; j < P; ++j){ C[i][j] = 0; for (k = 0; k < N; ++k){ C[i][j] += A[i][k] * B[k][j

2012-02-19 10:25:37 485

原创 Makefile 编译动态链接库和静态链接库

有一点切记,使用tab而不是空格,有可能在vi下面编辑的时候,vi将tab给办的成空格了,才会出现:*** missing separator.  Stop.在vi中设置不将tab转换成空格 "set expandtab   //将tab转换成空格set noexpandtab //保留tab形式CXX = g++ CC = gcc LD = ldCFL

2011-12-16 16:59:14 393

布隆过滤器在网页去重中的应用

布隆过滤器在网页去重中的应用 , 海量数据处理中的一个绝好应用

2010-11-29

htcp(给C++代码添加html标记)

如何你是一个喜欢在搜狐博客上发表C++技术贴的朋友,请往下看。 你是不是觉得直接将C++代码粘贴到博客上显得很不舒服,没有了已往的高亮显示,阅读代码变得很是费力,怎么样可能自动给代码加上相应的高亮显示,下面将给你提供一个简单方法。 这是我用C++写的一个linux下的小工具,称其为htcp(verson 1.0)吧(html cpp),这个小工具可以自动将你的C++源代码转换成可以被浏览器识别的html标签标记过的代码,从而为你提供一个快速的方法。 下面是该工具的源码目录, compile ------Makefile ------src.data ------res ------type.hpp ------type.cc ------Parse.hpp ------Parse.cc ------compile.cc 其中src.data是资源文件,即将你转换的代码存放进该文件 执行make命令,编译成功之后执行 ./compile > res , 将转换后的结果重定向到res文件 , Compile.cc就是主函数所在的文件. Makefile http://jinyun2012.blog.sohu.com/158883840.html type.hpp http://jinyun2012.blog.sohu.com/158883738.html?act=1283169053506 type.cc http://jinyun2012.blog.sohu.com/158883917.html Parse.hpp http://jinyun2012.blog.sohu.com/158883971.html Parse.cpp http://jinyun2012.blog.sohu.com/158884559.html compile.cc http://jinyun2012.blog.sohu.com/158884624.html 注意在粘贴的时候请在显示源码的模式下进行,即将文本框右下方的“显示源代码“处 有问题请发邮件至[email protected],缙云收 博客首页http://jinyun2012.blog.sohu.com

2010-08-30

ThinkPad风扇快速控制专用软件!(ThinkPad全系列版)

ThinkPad风扇快速控制专用软件!(ThinkPad全系列版) 中文破解版

2010-02-01

计算机网络---自顶向下

该教材简单易学,适合大学生计算机网络入门

2009-12-30

MPI_并行程序设计中文教程(C++/c/Fortan)

一本适合新手学习并行程序设计的优秀教材,当然对于并行算法比较熟悉的读者来说更可以得到质的提高

2009-09-04

JXTA 技术手册(适合新手学习)

一本适合新手学习P2P的绝好教材,这里有很多的例子,有助于新手从实践中去学习P2P网络的创建过程

2009-09-04

XML基础教程-02HTML与JavaScript.doc

教你如何学习使用XML语言!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

2009-08-09

XML基础教程-101概述.doc

教你如何学习使用XML语言!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

2009-08-09

Windows与编程

Windows编程技术及其实验课程,主要讲解Windows环境下Visual C++的MFC和.NET编程,也简单介绍标准C++和Visual C# 编程。采用Visual Studio 2005编程平台。

2008-12-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除