c++
文章平均质量分 57
linxuping
研发和管理效率化
展开
-
linux下进程容纳多少线程数
/usr/include/bits/local_lim.h/* The number of threads per process. */#define _POSIX_THREAD_THREADS_MAX 64原创 2013-01-31 11:30:27 · 431 阅读 · 0 评论 -
gcc omit-frame 如何找到函数的第一个参数
void run(int n){ int m = n;}int main(){ run(1000); return 0; }08048374 : 8048374: 55 push %ebp 8048375: 89 e5 mov %esp,%ebp 804原创 2014-05-27 09:04:47 · 600 阅读 · 0 评论 -
memcache研究笔记 之 conn内存管理借鉴
freeconns 是 conn 的二维数组, freecurr指向当前的空闲槽conn 的分配 -- conn_from_freelist()函数。分配策略很简单, 就是把 freeconns[freecurr -1] 分配出去, 然后 freecurr 指针下移一个单位.如果 freeconns 没有空闲的 conn, 分配就失败, 函数 conn_from_freelist 返回 NUL原创 2014-04-07 22:15:29 · 486 阅读 · 0 评论 -
do_QueryInterface分析
do_QueryInterface( nsISupports* aRawPtr )分析操作语法:nsCOMPtr prov = do_QueryInterface(aElement);它等价于:aElement->QueryInterface(iid, &prov)具体流程如下:1. 首先构造一个nsQueryInterface对象,它封装了一个nsISupports接口指针。转载 2013-02-21 14:33:59 · 1262 阅读 · 0 评论 -
memcache研究笔记 之 多线程接入的交互
mc主线程启动,worker线程启动主线程和work线程初始化event_base, 然后event_base_loopworker线程创建管道,notify_receive_fd event_add 到所在的event_base上有新请求接入,主线程处理函数event_handler回调driver_machin()处理conn_listening状态,dispatch_co原创 2014-04-06 14:51:57 · 1066 阅读 · 0 评论 -
memcache研究笔记 之 hashtable
查找过程中与关键字进行比较的次数通常取决于三个因素:哈希函数,解决冲突的方法和哈希表的填装因子。处理冲突方法相同的hashtable,其平均查找长度依赖于哈希表的装填因子:装填因子a = 表中填入的记录数/哈希表长度memcached 采用的hash 函数是Bob Jenkins 先生在1996 创立的一个算法,复杂度为O(6n+35),而且冲突率极低,该算法具体过程可以参阅这里。原创 2014-03-18 18:45:07 · 2595 阅读 · 0 评论 -
win7环境下编译rabbitmq-c
这东东也蛮折腾,本来俺在Linux下干了几年了,现在回到win7,也是工作内容的需要啊,跨语言间选择队列服务器还是挺不错的。win7 64bit下载安装 cmake 3.2.3 visual studio 2008下载源码包 rabbitmq-c-0.6.0.tar.gz直接上图记得把ssh的勾去掉,如果你不想装并且安全性不要求的情况下 然后去到,打开 ra原创 2015-06-05 15:54:41 · 1634 阅读 · 1 评论 -
[细节扣扣]inline那些事
给个简单的例子:test1.h:void run();test1.c:inline void run(){ do sth. }test2.c:#include "test1.h"int main(){ run(); return 0;}分别用gcc 和 g++ 执行gcc test1.c test2.cg++ test1.c test2.c原创 2015-06-12 23:01:51 · 944 阅读 · 0 评论 -
MFC的coredump文件以及调试
不要关闭系统弹出的“关闭程序”的对话框,保持现场用procexp_V15.40.0.0.4202571463.exe,找到正core的当前进程,右键 create dump -> Create Full Dump ...拷贝dmp文件到开发环境的exe目录下双击打开运行原创 2015-09-11 18:44:50 · 713 阅读 · 0 评论 -
演示coredump后出现?的情况
void run(){ int m = 2;}int main(){ int *m = new int; run(); return 0;}原创 2014-06-02 15:27:33 · 568 阅读 · 0 评论 -
特殊符号的编码资料参考
Unicode字符编码分布表——标点符号类http://wenku.baidu.com/view/379ca5697e21af45b307a8d8.htmlHTML字符实体(Character Entities),转义字符串(Escape Sequence)http://114.xixik.com/character/原创 2013-05-03 16:24:24 · 580 阅读 · 0 评论 -
两个最容易被人忽略的基本代码优化技术
Dr. Dobb’s Blogger 的Walter Bright曾写了一篇博文《 Overlooked Essentials For Optimizing Code 》,为我们总结了两个最容易被人忽略的基本代码优化技术。酷壳 个人网站版主陈皓 对本文进行了翻译 ,现转载于此,供大家学习。 全文如下:我编写程序至今有35年了,我做了很多关于程序执行速度方面优化的工(一个示例 ),我也看转载 2013-01-30 14:05:41 · 282 阅读 · 0 评论 -
看mozilla源码-类结构图
doxygen use this tool原创 2013-01-31 16:20:42 · 104 阅读 · 0 评论 -
算法领悟 - SmartThead
算法的性能影响了整个程序的性能一般情况下,在程序里面使用算法,要考虑它的重复性问题 - 时间或者空间复杂度,这个时候如何避免这种重复导致的性能损耗呢?第一是完全的算法内容重复性第二是有规律的算法内容重复性目前本人考虑的是使用SmartThread和Algorithm-cache比如对于游戏地图的最短路径问题,如果复杂度比较高,可以使用两个点之间的算法成果缓存,这个是提高性能的第原创 2013-12-08 19:16:27 · 511 阅读 · 0 评论 -
c++函数执行时间
计算函数的执行时间,粒度比较小,往往也能从中发现项目代码的瓶颈,及时发现问题来提升系统的性能。c++代码时间的估算首先考虑几个时间函数:clock_gettime( ) 、gettimeofday()、_ftime()、time(),其中clock_gettime( ) 提供了纳秒级的精确度,更加准确,可以选用。同时要考虑到往函数注入时间计算函数的时候,对于原代码要考虑易用性,尽量使用配置原创 2014-03-28 21:40:45 · 2761 阅读 · 0 评论 -
memcache研究笔记 之 item_locks锁数组
mc里面用了大量的锁,简直是随处可见,在确保不死锁的同时保证性能!里面精髓之处值得琢磨学习mc用了哪些锁:conn_lock、slabs_lock、slabs_rebalance_lock、hold_lock、item_locks本篇针对item_locks的粒度变化做了研究:static pthread_mutex_t *item_locks;item_lock_coun原创 2014-03-22 11:49:45 · 2236 阅读 · 0 评论 -
memcache研究笔记 之 socket接入与工作线程分发Model
// 服务器端 struct event_base* main_base; static const char MESSAGE[] ="Hello, World!\n"; typedef struct{ int index; int notify_recv_fd; int notify_send_fd; struct event_base *base;原创 2014-04-27 22:15:12 · 525 阅读 · 0 评论 -
bool返回值的函数如果不return会咋样
bool try_ret_bool(int flag){ if (flag == 0) return true;}测试程序:try_ret_bool(0) 毫无疑问返回true,控制之内try_ret_bool(1) 返回?接下去各种试验:int val = is_existed(1) 发现返回的是22,究竟是啥原因呢?看看汇编吧, 0x0804964原创 2015-05-30 14:21:45 · 4191 阅读 · 0 评论 -
比较隐秘的内存问题
share_ptr/auto_ptr 避免这样使用:强引用上的回环指针会导致内存泄露,可在destructor人为拆散症状:方便的话在ref_count加个打印就知道了,可以在对象析构加打印提醒是否有对象一直没被析构。基类析构函数非virtual 针对base *pt = new derived; delete pt的情况栈溢出.下标越界,栈区,一是越界离谱低于栈区最低地原创 2014-04-03 16:07:12 · 709 阅读 · 0 评论 -
core分析-间接的指针误操作
先来看下core的堆栈信息:(gdb) bt 20#0 0x06d99e7c in __exchange_and_add (__mem=0xc08a69d8, __val=-1) at ...../../../../include/c++/4.6.2/ext/atomicity.h:48#1 __exchange_and_add_dispatch (__val=-1, __mem=原创 2013-11-26 17:22:51 · 1958 阅读 · 0 评论 -
c++如何自动生成变量名
最近在完善当前项目指针自动管理释放的问题,尽量避免代码里面任何一个退出的地方都要亲笔写一遍释放,以后谁不小心加了个return就变成内存泄露了,所以类似智能指针的做法来自动管理指针,释放资源。malloc指针的自动管理代码:class _AutoFree{void *pt;private:void operator=(const _AutoFree& _at){};publ原创 2015-11-09 17:59:02 · 2643 阅读 · 0 评论