随笔分类 -  C/C++

摘要:一、Linux下redis下载与安装:下载:最新版本2.4.4官网http://redis.io下载地址:http://redis.googlecode.com/files/redis-2.4.4.tar.gz2、安装cd redis-2.4.4make 32bit编译完成后在src目录下生成redis-server redis-cli等make install(安装目录:/usr/local/bin)二、配置与命令:配置文件:requirepass xxxx ------- 要求密码验证(由于redis效率很高,为防止被枚举出密码,请设置很多位的密码,以防被破解)启动redis-server 阅读全文
posted @ 2011-12-08 17:37 ybtyoyo 阅读(758) 评论(0) 推荐(0)
摘要:问题源于这次招聘试题,其中有个同事故意在试题出了两道关于栈溢出,分别如下:void main(){ int a = 9; int b = a & 8; int c[1]; int i; for(i = 0; i < 2; i ++) { c[i] = i*i + i; } printf("%d %d %d",a,b,c[0]);}void why(){ printf("Hello!"); exit(0);}void func(int b){ int array[1]; array[2] = (int)why;... 阅读全文
posted @ 2011-09-30 14:23 ybtyoyo 阅读(957) 评论(0) 推荐(0)
摘要:基本思想: 堆排序是一树形选择排序,在排序过程中,将R[1..N]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系来选择最小的元素。 堆的定义: N个元素的序列K1,K2,K3,...,Kn.称为堆,当且仅当该序列满足特性:Ki≤K2i Ki ≤K2i+1(1≤ I≤ [N/2])。 堆实质上是满足如下性质的完全二叉树:树中任一非叶子结点的关键字均大于等于其孩子结点的关键字。例如序列10,15,56,25,30,70就是一个堆,它对应的完全二叉树如上图所示。这种堆中根结点(称为堆顶)的关键字最小,我们把它称为小根堆。反之,若完全二叉树中任一非叶子结点的... 阅读全文
posted @ 2011-09-28 11:47 ybtyoyo 阅读(947) 评论(0) 推荐(0)
摘要:排序:std::list用其自身的sort方法std::map用插入排序 1 // stl_test.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include <Windows.h> 6 #include <list> 7 #include <string> 8 #include <map> 9 10 struct _NpcDis11 {12 DWORD dwNpcId;13 INT nD 阅读全文
posted @ 2011-09-23 16:51 ybtyoyo 阅读(1436) 评论(0) 推荐(0)
摘要:memcached有很多版本的Client,具体可参照:http://code.google.com/p/memcached/wiki/Clients本次只讨论libmemcached这个client的安装及使用官网:http://libmemcached.org/libMemcached.htmllibMemcached was designed to provide the greatest number of options to use Memcached. Some of the features provided:Asynchronous and Synchronous Trans 阅读全文
posted @ 2011-09-23 16:21 ybtyoyo 阅读(618) 评论(0) 推荐(0)
摘要:Memcached是什么?存在意义?(提供缓存,提高系统性能)http://blog.developers.api.sina.com.cn/?p=124linux上安装Memcached:Memcached官网:http://memcached.org/本次安装基于1.4.7稳定版本http://memcached.googlecode.com/files/memcached-1.4.7.tar.gz另外,Memcached用到了libevent来做socket处理。libevent官网:http://www.monkey.org/~provos/libevent/本次安装基于libevent 阅读全文
posted @ 2011-09-23 16:03 ybtyoyo 阅读(221) 评论(0) 推荐(0)
摘要:一、下载及安装protobuf项目主页:http://code.google.com/p/protobuf/下载:http://code.google.com/p/protobuf/downloads/listprotobuf-2.4.1.tar.gz解压后进入protobuf-2.4.1目录进行安装:1、./configure(注:默认可能会安装在/usr/local目录下,可以加--prefix=/usr来指定安装到/usr/lib下,可以免去路径的设置,路径设置见Linux命令pkg-config)2、make3、make check4、make install(需要超级用户root权限 阅读全文
posted @ 2011-08-23 16:20 ybtyoyo 阅读(2931) 评论(0) 推荐(0)
摘要:malloc/free是c/C++语言的标准库函数;new/delete是c++的运算符,都可以用申请动态内存和释放内存。 对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象在创建是要自动执行Constructor函数,对象在消亡之前要自动执行Destructor函数。由于malloc/free是库函数不是运算符,不在编译器控制权限之内,不能够把Constructor及Destructor任务加于malloc/free. 阅读全文
posted @ 2011-08-11 09:46 ybtyoyo 阅读(165) 评论(0) 推荐(0)
摘要:虚表(virtual table)The virtual table is actually quite simple, though it’s a little complex to describe in words. First, every class that uses virtual functions (or is derived from a class that uses virtual functions) is given it’s own virtual table. This table is simply a static array that the compil 阅读全文
posted @ 2011-08-09 17:42 ybtyoyo 阅读(406) 评论(0) 推荐(0)
摘要:如果一个类拥有资源(堆,即分配的动态内存),当这个类的对象发生复制时复制了资源的过程就叫深拷贝,而存在资源(堆,即分配的动态内存)但并未复制资源的情况叫浅拷贝。编译器会为类提供一个默认拷贝构造函数就是一个浅拷贝。 浅拷贝存在的问题:类体内的成员需要开辟动态内存来存放资源,复制时如果用浅拷贝只会拷贝指向动态内存的指针,并未实际重新分配一块内存来存放资源,在对象虚构时,会出现两次释放同一块内存,导致运行错误。 浅拷贝: 1 #include "stdafx.h" 2 #include <iostream> 3 4 class Test 5 { 6 public: 7 阅读全文
posted @ 2011-08-08 23:50 ybtyoyo 阅读(215) 评论(0) 推荐(0)
摘要:1、指针会分配内存区域,而引用不会。2、指针与引用在初始化时不同,具体:指针可以初始化为空,引用则不可以。3、指针指向值可以改变,但是引用一旦跟某个对象绑定,则无法改变。(程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。) 阅读全文
posted @ 2011-08-08 23:32 ybtyoyo 阅读(168) 评论(0) 推荐(0)
摘要:在游戏开发过程,经常可以碰到一些对象需要不断被创建、销毁,这会导致性能低不说,还会出现内存碎片。以下实现一种可扩展、可重用的对象缓冲池来避免这种情况。  具体使用方法:  测试代码2:  输出:  问题出现:此问题比较隐蔽,在pObj Free之后内存值并没有清空,pObj2又重用了pObj对应的内存块,此时就出现了pObj2->m_var还是pObj->m_var的值,解决方法请看下回分解。 阅读全文
posted @ 2011-02-16 16:34 ybtyoyo 阅读(466) 评论(0) 推荐(0)
摘要:在编程中涉及到“中文字符”时,经常需要进行字符集编码间转换。比如代码中以“GBK”字符集编码来处理,而程序中读取文件内容却是“UNICODE”字符集编码(即文件的前两个字节为0XFFFE),此时就涉及到字符集编码间转换,以免出现乱码。LINUX:字符集编码转换依赖于本地系统,命令:iconv --list显示所有可以相互间转换的值。Windows:  完成UTF-16(宽字符)转换成其他新字符集编码(__in UINT CodePage).http://msdn.microsoft.com/en-us/library/dd 阅读全文
posted @ 2011-02-15 15:51 ybtyoyo 阅读(247) 评论(0) 推荐(0)
摘要:算法:对vector进行堆排序// range heap example#include <iostream>#include <algorithm>#include <vector>using namespace std;int main () { int myints[] = {10,20,30,5,15}; vector<int> v(myints,myints+5); vector<int>::iterator it; make_heap (v.begin(),v.end()); cout << "ini 阅读全文
posted @ 2011-01-21 16:49 ybtyoyo 阅读(11510) 评论(0) 推荐(0)
摘要:进程间通信方式: socket、管道(pipe)、信箱(MailSlot)、共享内存(ShareMemory)  共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。  Windows上共享内存是通过FileMapping实现的;  1、创建FileMapping内核对象:CreateFileMapping;  2、打开FileMapping内核对象;  3、Map 阅读全文
posted @ 2010-11-14 13:55 ybtyoyo 阅读(3936) 评论(0) 推荐(0)
摘要:环形缓冲区是生产者和消费者模型中常用的数据结构。生产者将数据放入数组的尾端,而消费者从数组的另一端移走数据,当达到数组的尾部时,生产者绕回到数组的头部。  如果只有一个生产者和一个消费者,那么就可以做到免锁访问环形缓冲区(Ring Buffer)。写入索引只允许生产者访问并修改,只要写入者在更新索引之前将新的值保存到缓冲区中,则读者将始终看到一致的数据结构。同理,读取索引也只允许消费者访问并修改。... 阅读全文
posted @ 2010-11-14 13:49 ybtyoyo 阅读(2283) 评论(1) 推荐(0)
摘要:DLL导入方式一、__declspec(dllimport)与__declspec(dllexport)相呼应二、LoadLibrary、GetProcAddress方式方式一、__declspec(dllimport)  1、此方式与__declspec(dllexport)相对应,一般有如下定义:  因此只要不定义DLLWRAP_EXPORTS即可  2、把生成dll对应的lib文件作为依赖库... 阅读全文
posted @ 2010-11-05 11:14 ybtyoyo 阅读(379) 评论(0) 推荐(0)
摘要:DLL导出有两种方式:  一、使用__declspec(dllexport);  二、采用模块定义(.def)文件声明,(.def)文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。(模块定义.def文件);方式一、使用__declspec(dllexport);导出变量:导出函数:导出class:方式二、采用模块定义.def文件test.def;导出dll函数DEESCRIPTION... 阅读全文
posted @ 2010-11-05 11:12 ybtyoyo 阅读(290) 评论(0) 推荐(0)
摘要:在 C++ 中,同一个翻译单位(.cpp文件)里的全局对象的初始化顺序是先定义的对象先初始化(同时也后析构),但 C++ 标准并没有规定不同翻译单位间全局对象的初始化顺序。按照这个分析,以下的代码可能工作,也可能不工作(cout 是 C++ 用于输出的全局对象,和我们自己的对象位于不同的翻译单位):   OK,你会说这段代码绝对运行正确,也就是说 cout 总是比我们的对象先初始化以及后析构。这... 阅读全文
posted @ 2010-11-05 11:00 ybtyoyo 阅读(733) 评论(0) 推荐(0)