51CTO博客开发技术成就梦想
转载自:http://renkai.org/2011/08/linux%E4%B8%8Bthinkpad%E5%B0%8F%E7%BA%A2%E7%82%B9%E7%9A%84%E9%80%9F%E5%BA%A6%E5%92%8C%E7%81%B5%E6%95%8F%E5%BA%A6%E8%AE%BE%E7%BD%AE/
先贴一段代码,有时间再来分析: #include <stdlib.h> #include <stdio.h> #include <pthread.h> #include <string.h> #include <sys/types
今天偶然看到两篇关于讨论epoll与高性能问题的文章,文章均颇为争议,下面是两篇文章和讨论的地址: http://guanzhongdaoke-gmail-com.iteye.com/blog/189005 http://bbs.linuxtone.org/thread-3164-
(本文特质80x86系列) 计算机各组件之间通过三种总线结构联系起来:数据总线、地址总线和控制总线 数据总线用于各组件之间的数据传递:CPU<-->Memory、CPU<-->I/O Devices 数据总线的宽度决定
首先抛两个话题: (1)ELF文件有分段,linux内存有分段机制,这儿意指哪个?两个分段有什么关联 (2)常有人提到linux不使用分段机制,是什么个情况? 关于第一个问题,ELF文件的分段,更多的是从功能和属性来做区分,是在文件区段上的划分;内存的分段机制是针对内存布局的划分;这两者本来没有必然的联系,ELF文件中的某个段可以加载到内存的任意段中,加载到内存的任何位置。为
花了一周的时间,学习了链接、加载和库的相关内容。阅读了《链接器和加载器》、《程序员的自我修养-链接、加载和库》这两本书(这个话题相关的资料很少见,这两本一个国外一个国内的,算是比较经典),当然,一遍是肯定不够的,计划是完成五遍。 这一些系列的文章,可算是学习笔记,但我想抛开书本,凭借自己的记忆和理解来写这部分内容。 &
内存数据持久化的两种常见方法: 1.将内存数据定期dump到磁盘 优点:效率高,操作简便 缺点:会损失
转载自:http://blog.csdn.net/wuliming_sc/article/details/3855270 首先看看下面一段程序代码: class Foo { public: int val;  
C++支持函数的重载,对重载函数版本的选择,在链接的时候如何处理,C++的做法是为每个重载版本根据其参数类型扩展其原始函数名称,这样根据重载类型即可决定实际调用哪一个具体的重载版本 鉴于历史遗留原因,以及C++的设计原则,保持和C库链接的兼容性,需要C++能链接C库函数;可是C语言对函数名称的扩展与C++有不同的处理方式,比如在函数原始名称前简单的加上'_',或者根本没有变化,当C++重载一个C
试想这样的情景,程序调用某函数A,A函数存在于两个动态链接库liba.so,libb.so中,并且程序执行需要链接这两个库,此时程序调用的A函数到底是来自于a还是b呢? 这取决于链接时的顺序,比如先链接liba.so,这时候通过liba.so的导出符号表就可以找到函数A的定义,并加入到符号表中,链接libb.so的时候,
之前写过一篇博文,介绍当free()掉与malloc()返回指针不一致时导致崩溃原因:http://liulixiaoyao.blog.51cto.com/1361095/565677 这篇博文里面解释了崩溃是缘于指针变化之后,定位不到正确的内存管理头部导致; 今天想到一个问题,对于栈上的指针,指针的值是变量的地址,比如10元素的数组,可以直接通过p+i的方式访问,那对于堆上分配的内存,同样是
解决PHP Json_decode 解析失败 项目中遇到一个问题,来访问EXE后,传过来的JSON数据,处理到某一个数据库时出现了问题,JSON数据未被解析。 分析后发现数据中含有法语字符。 json_decode和json_encode是接受UTF-8并返回UTF-8数据的。问题出来这里, 传过来的数据iso-8859-1, 首先使用utf8_encode,再使用json_decode
一直以来都纠结于现如今是否在网络编程中还会受accept惊群的影响而纠结,纠结于为什么nginx中是accept+epoll+锁机制,而lighttpd中却没有使用锁;传说中在如今的内核中早已经解决了惊群现象,但是为什么nginx仍使用了锁呢? 典型的情景是,在fork子进程之前bind + listen,子进程中accept,每个进程实际仍是在同一个socket接口上监听(虽然文件描述符不同,
装饰者模式:在不改变现有对象结构的前提下,对现有对象进行更改;新建一个类,以该对象为构造参数,在新类中进行更改; 外观模式:用一个类的静态方法包装一个功能的相关逻辑,提供给外部一个单一接口 委托模式:根据参数不同,实例化出的对象不一样,但各对象具有统一的方法(可通过接口实现),可消除大量的if/else或者switch;与工厂模式的区别:工厂模式通过不同的参数实例化不同的对象后返回
mysql主从延迟的原因(排除网络影响和机器性能影响): 大的事务更容易影响主从延迟 主要的原因是 主库对DB的更新是多线程执行的(有锁机制保证,可多线程执行),但从库获取binlog并执行更新都是单线程执行 如果有一个大的事务A在执行(预期需要1天),另外有很多其他的更新操作,在主库上,事务A以外的更新操作可以与事务A并发执行,但在从库上只有事务A完成后才会执行其他的更新操作,所以在主库上
一、网络子系统初始化 inet_init 注册各协议结构体:proto_register,注册slab 安装协议族操作表 sock_register(&inet_family_ops); &
使用如下语句分配堆中内存空间: char * ptr = (char *)malloc(SIZE+1); 在之后的程序中ptr++;类似的移动ptr所指向的位置的操作,最后free(ptr);为什么失败甚至导致崩溃,为什么不是释放了部分内存(ptr当前位置到原分配内存空间末尾处)? 原因是分配内存时,每个分配的内存块都有
转载自:http://forum.eviloctal.com/thread-39105-1-1.html Perl之单行命令特技 信息来源:邪恶八进制信息安全团队(www.eviloctal.com) hi.baidu.com/isno 替换 将所有C程序中的foo替换成bar,旧文件备份成.bak perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c很强
本文会记录一些linux内核实现中使用到的一些小技巧,工具等等,会根据学习进度不定时更新本文...... 双向循环链表 第一个想写的是linux的双向循环链表(写这个的原因是因为最近学习epoll的内核代码实现,进而需要了解linux的等待队列,这其中也用到了双向循环链表,稍后也会分析linux的等待队列) linux的双向循环链表之于传统的双
今天跟人谈到socketpair的问题,晚上回来写了个程序验证下自己的猜测! 先说说我的理解:socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中使用),描述符存储于一个二元数组,eg. s[2] .这对套接字可以进行双工通信,每一个描述符既可以读也可以写。这个在同一个进程中也可以进行通信,向s[0]中写入,就可以从s[1
本文转载自:http://www.bitscn.com/network/protocol/201004/185316.html TCP_DEFER_ACCEPT 我们首先考虑的第1个选项是TCP_DEFER_ACCEPT(这是Linux系统上的叫法,其他一些操作系统上也有同样的选项但使用不同的名字)。为了理解TCP_DEFER_ACCEPT选项的具体思想,我们有必要大致阐述一下典型
先转载一个链接: http://www.linuxidc.com/Linux/2010-08/27780.htm 有关linux下面用C操作dbm资料库的问题,网上大部分都是如前面链接页面所述,要使用gdbm ,链接是要-lgdbm;如果要使用兼容ndbm的话还得包含gdbm-ndbm.h头文件。 可某天我写一个dbm程序的时候,发现用上面的各种方法都不能解
前几天网上搜索如何更改执行进程的进程名称,并没有得到一个好的答案. 刚刚阅读nginx的源码,发现这样一种解决方案,记录之: 网上说的比较多的是直接更改argv[0],但是如上图中所示,nginx中指出,必须将argv[1]置为NULL才行,而且要注意,系统给argv[0]提供的空间可能不足以存储你所要求的新title,解决方案是重新给环境变量申请内存区域,
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号