`
文章列表
转自:http://blog.csdn.net/hengyunabc/article/details/7773250 写在前面的话 在C++11之后,std::bind是C++标准库的一个组件了。一开始想弄个C++11的实现来研究下,发现里面用到了可变参数模板(代码变得非常神奇). http://llvm.org/svn/llvm-project ...
同事(先进哥)对全局变量用法的一点建议: 我们当前很多库中使用了很多对象全局变量。用来执行一些初始化过程,并用以保证这些对象变量在库加载时即可使用。 但是过多的、分散在各处的全局变量,以及同库或者不同库的全局变量之间的依赖关系, 使得初始化过程的逻辑变得复杂,也因此带来过一些棘手的问题。   所以,这里整理了一下gcc编译器对库初始化和释放过程的接口,以便对全局变量及初始化过程进行统一管理     1. _init()和_fini()函数gcc向每个so库中,默认添加_init和_fini函数。 _init在so库装载完成后执行,_fini在库卸载前执行。 默认的_i ...
最近使用GDB调试程序的一点经验之谈: 1、程序运行中生成一个Core文件便于保护现场,调试程序,gcore可以满足这种需求: gcore:对正在运行的进程生成一个内存转储文件,方便保护现场。例如: –     gcore -s -c test.core pid –     用-s选项使进程在转储过程中处于停止状态,可以保证转储文件的一致性。若不用-c选项指定转储文件名,则会使用默认的core.pid形式的文件名。   2、我的linux虚拟机中调试程序时,发现直接run程序没问题,但gdb调试的时候就提示找不到某个动态库 原因如下: 1)我的虚拟机里同一个用户下由于要编译测试 ...
看了下Google Protobuf的源码,对于反射机制,无论c++实现还是java实现都是采用map查找,这个应很高效率。实际我们在项目中无形中也用 到了这种思路,仅仅没系统化。通过一个类的原型对象做辅助,然后配合map结构,就可很简单的根据符号名字来反射对象。从而实现一种抽象接口的稳定,把变 化隔离到了通讯协议 的数据内。可参考http://blog.chinaunix.net/uid-52437-id-3142718.html文章。原型 prototype pattern参考http://blog.chinaunix.net/uid-52437-id-2108601.html wiki: ...
这两天在看Pthread 资料的时候,无意中看到这样一句话(man pthread_detach): Either pthread_join(3) or pthread_detach() should be called for each thread that an application creates, so that system resources for the thread can be released. (But note that the resources of all threads are freed when the ...
首先安装msysgit http://code.google.com/p/msysgit/downloads/list 接着安装TortoriseGit 设置行结束转换时,选择checkout as-is, commit as-is 安装过程中选择TortorisePLink 安装完成。   TortoriseGit中setting设置Name、Email,用于commit   首先要在本地创建一个ssh密钥,这里有一个细节必须注意,不能用tortoisegit自带的Putty Key Generator来生成公私密钥,需要执行msysgit里面的msys.bat并在命令行中 ...
内存数据库实现中涉及数据的同步一致性问题,可以实现高效的记录锁来尽量减少同步的开销。 下图是一个内存数据库数记录锁的实现分析:  一个MDB服务端中会包含多个Table,每个Table会包含一个或多个Index键值,操作某张 ...
Linux0.11内核中的wait_on_buffer和wait_on_inode函数是非常有代表性的延迟性函数处理过程 Linux0.11版函数定义: static inline void wait_on_buffer(struct buffer_head * bh){    cli();    while (bh->b_lock)        sleep_on(&bh->b_wait);    sti();}   分析如下: 1.       首先可以明确,wait_on_buffer是工作在内核态的函数。更进一步应当理解为两种可能性:           ...
最近分析了linux0.11的系统启动过程,对于了解OS启动过程及实模式、包含模式,已经分页机制等还是很有意义的~ 进入main.c后系统初始化流程如下:  
转自:http://blog.csdn.net/wykwdy007/article/details/6720254    TCP的数据流大致可以分为两类,交互数据流与成块的数据流。交互数据流就是发送控制命令的数据流,比如relogin,telnet,ftp命令等等;成块数据流是用来发送数据的包,网络上大部分的TCP包都是这种包。        很明显,TCP在传输这两种类型的包时的效率是不一样的,因此为了提高
TCP 三次握手建立连接,四次握手关闭连接,状态迁移过程:  TIME_WAIT状态也称为2MSL等待状态。大多数TCP实现,在2MSL等待期间,socket中使用的本地端口,在默认情况下不能再被使用。
  使用下面的 route 命令可以查看 Linux 内核路由表。netstat -nr # route Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.0.0 * 255.255.255.0 U 0 0 0 eth0 169.254.0.0 * 255.255.0.0 U ...
转自:http://www.cnblogs.com/zhenjing/archive/2011/07/30/distribute_system.html 大规模分布式系统问题集及解决方案   单点一致性更新问题   问题描述:当多个用户同时更新某个数据时,如何保证最终数据的一致性。如用户A,B更新数据D,A->D+1, B->D+1,最终结果D+2。  
linux项目调试中如果涉及很多动态链接库,动态库代码变更调整后,有时候会发现程序在执行过程中某些接口函数并没有进入变更后的接口实现中,此时就会怀疑应该是有某些旧的动态库中包含了接口函数变更前的实现,那如何定位包含旧接口实现所属的动态库就成为了解决这个问题的关键:   这个时候linux下调试利器gdb就可以出场了。 方案一: 1)gdb 挂起程序,对问题的接口函数设置断点,此时bt发现虽然可以看到代码所属文件及函数却没显示所属的库(个人不理解为啥GDB不显示代码所属的动态库呢,其他调试工具如pstack程序的时候是显示的)。 2)bt, 然后 f *** 进入问题接口函数所属的栈 ...
转自:http://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/index.html 应用 Valgrind 发现 Linux 程序的内存问题   回页首 Valgrind 概述 体系结构 Valgrind是一套Linux¸
Global site tag (gtag.js) - Google Analytics