随笔分类 - c/c++
摘要:在linux下的hash_maphash_map本身以前本身不属于标准库,是后来引入的.有两种可能:一种可能它被放在了stdext名空间里,那么你就要使用using namespace stdext 引入该名空间并#include ;.另一种可能就是它被反在了标准库的ext目录底下,仍旧属于std名...
阅读全文
摘要:MyMap.erase(Itor++);//在windows下也可以Itor = MyMap.erase(Itor),但是在linux下不行。一个是把指针定为const 。就是不能修改指针。也就是char * const p一个是把指针指向的内容定为const 。就是不能修改指针指向的内容 也就是c...
阅读全文
摘要:云风的:http://blog.codingnow.com/2012/03/dev_note_13.html内存碎片优化:tcmalloc 性能工具:profile内存泄漏工具:valgrind(valgrind --leak-check=full ./test),gdb(gdb ./test core.1999 -> where)内存泄露检测使用tcmalloc的程序,用valgrind无法检测内存泄露,可以使用google-perftools提供的heap checker使用方法: which pprof /usr/local/bin/pprofexport PPROF_PATH=/
阅读全文
摘要:http://www.acejoy.com/forum.php?mod=viewthread&tid=3172&reltid=3173&pre_thread_id=0&pre_pos=1&ext=CB
阅读全文
摘要:copytemplate<class InputIterator, class OutputIterator> OutputIterator copy ( InputIterator first, InputIterator last, OutputIterator result ){ while (first!=last) *result++ = *first++; return result;}std::copy(v_int.begin(),v_int.end(),v_i.begin()); 把v_int容器的内容复制到v_i容器中std::copy(v_int.begin..
阅读全文
摘要:vector: 是单项连续的数组,因此增加item时,可能地址换了(寻找一个能存放得下当前的item数量),于是iterator可能变化了.只能在尾部加itemlist: 双向的链接,因此删除或者增加item不改变iterator.排序只能用自带的sort,因为不能随意访问deque: 双向的,连续的固定数组组合.stack: 默认是以deque的适配器,也可以转用以list为底层.无iteratorqueue: 默认是以deque的适配器,也可以转用以list为底层.无iteratorpriority_queue: 默认是以vec...
阅读全文
摘要:323535试下malloc的sizeof;46485456576064看到78看函数模板和类模板的区别enum n{N,M,K,J,L};cout << sizeof(n) << endl; //输出4class B{public: virtual void x(){ cout << "call B virtual x()" << endl; }};class D: public B{public: void x(){ cout << "call D virtual x()" <<
阅读全文
摘要:const,c\c++中非常常用的关键字。首先我们看看const有那些修饰方法。最前面我们来看一个问题。char *p = "123";可能有的人不知道,这里的这个"123"是存储在常量区的,不容许修改的。也就是说它是个const类型的。标准的写法应该是char const *p = "123";至于为什么编译器容许上面的那个不标准的写法,可能是因为兼容性的问题吧。char p[4] = "123";//这个和上面的开始大不一样的啊。切入正题。const int s = 0;上面的很容易理解。但带上指针有些同学可能
阅读全文
摘要:实际用户ID,有效用户ID和设置用户ID看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念一直一知半解。今天好好区分了一下这几个概念并总结如下。说白了这几个UID引出都是为了系统的权限管理。下面分别用RUID, EUID,SUID来表示实际用户ID,有效用户ID,设置用户ID。另外用户ID是个整型数,为了说明方便真接使用了用户名来代表不同的UID。先解释一下这几个ID的作用:RUID,用于在系统中标识一个用户是谁,当用户使用用户名和密码成功登录后一个UNIX系统后就唯一确定了他的RUID.EUID,用于系统决定用户对系统资源的访问权限,通常情况下等于RU
阅读全文
摘要:锁类型 初始化方式 加解锁特征 调度特征普通锁 PTHREAD_MUTEX_INITIALIZER 同一线程可重复加锁,解锁一次释放锁 先等待锁的进程先获得锁嵌套锁 PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP 同一线程可重复加锁,解锁同样次数才可释放锁 先等待锁的进程先获得锁纠错锁 PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP 同一线程不能重复加锁,加上的锁只能由本线程解锁 先...
阅读全文
摘要:一、类型限定词volatile限定词volatile告诉编译器该变量除了可以被程序改变以外还可被其他代理改变。它通常被用于硬件地址和与其它并行运行的程序共享的数据。如:volatileintlocl;volatileint*ploc;你可能会奇怪为什么ANSI觉得有必要把volatile作为一个关键字。原因是它可以方便编译器优化。例如val1=x;/* 一些不使用x的代码 */val2=x;一个聪明的编译器可能注意到你使用了两次x,而没有改变它的值。那么,它有可能把x临时存储在一个寄存器中。接着,当val2需要x时,可以通过从寄存器而非初始的内存位置中读取该值以节省时间。这个过程被称为缓存(c
阅读全文
摘要:相关函数bcopy,memccpy,memcpy,memmove,strcpy,strncpy头文件#include定义函数void * memcpy(void * dest ,const void *src, size_t n);函数说明memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存 地址上。与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'?'而结束。 返回值返回指向dest的指针。 附加说明指针src和dest所指的内存区域不可重叠。#include#includeint main(int argc,c
阅读全文
摘要:此文所有的实验都是基于下面的程序:char str[10];for (int i = 0; i < 10; i++) str[i] = '!';执行完后str的值为str = "!!!!!!!!!!"我们把str的每个字符都初始化为惊叹号,当str的值发生变化时,使用printf打印str的值,对比先前的惊叹号,这样就可以方便的观察str发生了怎样的变化。下面我们做几个小实验,看看使用sscanf和正则表达式格式化输入后,str有什么变化。实验1:sscanf("123456","%s",str); ------
阅读全文
摘要:D d1 = d; 这个是调用的是复制构造函数 函数参数是以copy constructor初始化的Default constructor的错误认为:(P47)任何class如果没有定义default constructor,就会被合成一个出来,其实不是.(要有四种之一,带有default constructor的member class object或base class或带有一个virtual function的class或者带有一个virtual base class 的class)编译器合成出来的default constructor会现实定义”class内每一个data mem...
阅读全文
摘要:在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linux/posix_types.h头文件有这样的声明:#define __FD_SETSIZE 1024表示select最多同时监听1024个fd,当然,可以通过修改头文件再重编译内核来扩大这个数目,但这似乎并不治本。epoll的接口非常简单,一共就三个函数:1. int epol
阅读全文

浙公网安备 33010602011771号