上一页 1 2 3 4 5 6 7 8 ··· 13 下一页
摘要: 在程序中使用#error可以在编译的时候强制产生一个错误及提示例如:#ifndef SIGSEGV#error "SIGNAL.H does not define SIGSEGV; running this program WILL cause a core dump/crash!"#endif例如:int main(){ #error "this is just used to test!" return 0;}[root@lihao /]# makecc test.c test.c:6:2: #error "this is just use 阅读全文
posted @ 2013-04-02 14:06 only_eVonne 阅读(490) 评论(0) 推荐(0) 编辑
摘要: 打算优化系统的内存分配,接管glibc提供的内存管理,但是整个工程的代码量很大,使用malloc、realloc、calloc和free的地方到处都是,如果自己写好的接口需要重命名所有的调用,先不说工作量,部分没有权限查看代码的.a文件就搞不定了。所以需要替换掉系统的malloc,保证原有调用的名称不变。经过尝试,共有四种方法可以替换,各有优缺点吧。方案1 使用环境变量LD_PRELOAD 环境变量LD_PRELOAD指定程序运行时优先加载的动态连接库,这个动态链接库中的符号优先级是最高的。标准C的各种函数都是存放在libc.so.6的文件中,在程序运行时自动链接。使用LD_PRELOAD后, 阅读全文
posted @ 2013-04-02 13:08 only_eVonne 阅读(2443) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/talking/archive/2011/04/18/2020274.html 阅读全文
posted @ 2013-03-23 11:39 only_eVonne 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 在Linux系统中,可以用/proc/stat文件来计算cpu的利用率。这个文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。cat /proc/statcpu 65376847 3627562405159 10834971593 3765180 93399 2395097 0cpu0 7680302 5263 111909 1355640955 47680 0 185343 0cpu1 6527638 2261 327795 1356540189 249151 1 24242 0cpu2 6239465 47114 200809 1354709532 215. 阅读全文
posted @ 2013-03-19 21:45 only_eVonne 阅读(1656) 评论(0) 推荐(0) 编辑
摘要: 在写代码的时候,经常会用到读取系统时间的函数。很多人都会调用localtime函数来将时间转换本地时间,但是大家往往会忽略了一点,localtime函数不是线程安全的。如果在多线程里调用localtime函数,很可能会出现问题。struct tm *localtime(const time_t *clock);这个函数在返回的时候,返回的是一个指针,实际的内存是localtime内部通过static申请的静态内存,所以通过localtime调用后的返回值不及时使用的话,很有可能被其他线程localtime调用所覆盖掉 多线程应用里面,应该用localtime_r函数替代localtime函数, 阅读全文
posted @ 2013-03-16 15:02 only_eVonne 阅读(15539) 评论(0) 推荐(2) 编辑
摘要: 我们看下面的函数,函数体中只有一行语句: double Average(double total, int number){ return total/number;} 定义这么简单的函数有必要吗?实际上,它还是有一些优点的:第一,它使程序更可读;第二,它使这段代码可以重复使用。但是,它也有缺点:当它被频繁地调用的时候,由于调用函数的开销,会对应用程序的性能(时间+空间效率,这儿特指时间)有损失。例如,Average在一个循环语句中重复调用几千次,会降低程序的执行效率。那么,有办法避免函数调用的开销吗?对于上面的函数,我么可以把它定义为内联函数的形式:inline double Ave... 阅读全文
posted @ 2013-03-15 16:37 only_eVonne 阅读(9330) 评论(0) 推荐(4) 编辑
摘要: switch...case与if...else的根本区别在于,switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。从而,switch...case不用像if...else那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。 具体地说,switch...case会生成一份大小(表项数)为最大case常量+1的跳表,程序首先判断switch变量是否大于最大case 常量,若大于,则跳到default分支处理;否则取得索引号为switch变量大小的跳表项的地址(即跳表的起始地址+表项大小*索引... 阅读全文
posted @ 2013-03-15 15:45 only_eVonne 阅读(453) 评论(0) 推荐(0) 编辑
摘要: 转自 http://blog.csdn.net/marcky/article/details/6025651事件循环这个概念貌似在windows编程中提得更多,Linux程序却很少提及这个概念。本文所提及的事件循环其实就是worker cycle,由于此处将关注的不再是worker进程,而是worker进程在循环过程中关于事件处理的环节,因此就盗用了事件循环这个概念。在具体看代码前,先看一下这个“循环”的概貌:经过前面相关博文的介绍,我们了解到master进程创建好一个worker进程后,worker进程还会进行一个初始化工作,然后才会陷入“死”循环中。这个“死循环”也就是本文将谈及的事件循环 阅读全文
posted @ 2013-03-14 10:55 only_eVonne 阅读(744) 评论(0) 推荐(0) 编辑
摘要: 转自 http://blog.163.com/pandalove@126/blog/static/9800324520122633515612/【遇到问题】 手头原来有一个单进程的linux epoll服务器程序,近来希望将它改写成多进程版本,主要原因有:在服务高峰期间 并发的 网络请求非常海量,目前的单进程版本的程序有点吃不消:单进程时只有一个循环先后处理epoll_wait()到的事件,使得某些不幸排队靠后的socket fd的网络事件处理不及时(担心有些socket客户端等不耐烦而超时断开);希望充分利用到服务器的多颗CPU; 但随着改写工作的深入,便第一次碰到了“惊群”问题,一开始我. 阅读全文
posted @ 2013-03-13 17:06 only_eVonne 阅读(621) 评论(0) 推荐(0) 编辑
摘要: 转自 http://blog.csdn.net/marcky/article/details/6025647Nginx的高性能应该算是事件驱动的功劳。Nginx事件处理的相关代码位于src/event目录中,事件驱动是Nginx的核心,所以代码量相对也比较大。事件驱动初始化的过程主要由下图中的三步组成。第一步:解析配置文件的初始化在Nginx的启动初始化过程中,将调用ngx_conf_parse()解析配置文件,此过程将遇到类似如下的配置项:events { worker_connections 20480;}此处的events是一个block指令,在它下面还可以配置很多其他的指令,比如这里的 阅读全文
posted @ 2013-03-13 15:14 only_eVonne 阅读(1721) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 13 下一页