用Bollger记录技术之路的点滴...

关注高性能linux网络编程,NoSQL, c/c++/java ~~~ weibo @语_行 http://weibo.com/201281062~~~ twitter @JerryVector https://twitter.com/JerryVector
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2013年11月18日

摘要: 什么是内存对齐对齐是跟数据在内存中位置相关的话题。如果一个变量的内存地址正好是它长度的整数倍,它就称作 是自然对齐的。举例来说,对于一个32为的类型的数据(通常会是4个字节),如果它在内存中的地 址刚好可以被4整除,那它就是自然对齐的。一些体系结构对对齐的要求非常严格。通常像RISC的系统,载入未对齐的数据会导致处理器陷入(一 种可处理的错误);还有一些系统可以访问没有对齐的数据,只不过性能会下降。编写可移植的代码 要避免对齐问题,保证所有的类型都能够自然对齐。更多内容请移步: 内存对齐 阅读全文

posted @ 2013-11-18 18:56 语行 阅读(304) 评论(0) 推荐(0) 编辑

2013年11月16日

摘要: 关闭socket-close我们知道,tcp是一种支持全双工(full-duplex)通信的的协议,也就是说建立连接的两端可以在同一个时刻发送、接受数据。在需要关闭套接字的时候,我们一般调用:int close(int fd) 调用close后,这个套接字描述符将不再指向任何文件继而可以被重复使用。同时调用close后,tcp连接断开,client端和server段都不能再发送/接受数据.....更多内容请移步:深入分析tcp close与shutdown 阅读全文

posted @ 2013-11-16 16:20 语行 阅读(1354) 评论(0) 推荐(0) 编辑

2013年10月23日

摘要: 此博客将不再更新,请移步:https://github.com/yuxingfirst/Blogs 阅读全文

posted @ 2013-10-23 12:27 语行 阅读(270) 评论(1) 推荐(0) 编辑

2013年8月26日

摘要: 可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语 法如下所示:x/ n、f、u是可选的参数。n是一个正整数,表示需要显示的内存单元的个数,也就是说从当前地址向后显示几个 内存单元的内容,一个内存单元的大小由后面的u定义。f 表示显示的格式,参见下面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字 节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当 阅读全文

posted @ 2013-08-26 15:02 语行 阅读(909) 评论(0) 推荐(0) 编辑

2013年8月14日

摘要: 用C++编程的都知道,C++提供了一个非常强大的操作符重载机制,利用操作符重载,我们可以为我们自定义的类增加更多非常有用的功能。不过,C++也有限制,就是当我们为自定义的类重载操作符时,重载操作符的含义应该跟内置类型一样,比如,你不能通过重载+号操作符来实现两个数相乘的运算,实现需要是两个数相加的运算。本篇,我重点介绍下重载前置++和后置++的区别(前置--跟后置--类似)。 我们知道,写for循环年的时候,可以用下面这两种方式: for(int i=0; i<10; i++) { //do something }for(int j=0; j<10; ++j) { //d... 阅读全文

posted @ 2013-08-14 23:39 语行 阅读(12659) 评论(5) 推荐(1) 编辑

2013年7月30日

摘要: SGI STL考虑到小型内存区块的碎片问题,设计了双层级配置器,第一级配置直接使用malloc()和free();第二级配置器则视情况采用不同的策略,当配置区大于128bytes时,直接调用第一级配置器;当配置区块小于128bytes时,遍不借助第一级配置器,而使用一个memory pool来实现。究竟是使用第一级配置器还是第二级配置器,由一个宏定义来控制。SGI中默认使用第二级配置器。 第一级配置器实现的比较简单,调用malloc()申请内存,申请失败的时候,将抛出bad_alloc异常。下边我着重介绍下二级配置器的实现思路。 上边提到了第二级配置器视情况不同而采用不同的策略;其主要目... 阅读全文

posted @ 2013-07-30 21:09 语行 阅读(1962) 评论(0) 推荐(0) 编辑

摘要: 1、 符合STL标准的空间配器接口STL是c++中使用非常广泛的一个标准库,它包含各种有用的容器。而空间配置器作为STL各种容器的背后的核心,负责容器内部内存的分配和释放。不过空间配置器可以分配的也不只是内存,因为空间也意味着可以是磁盘或者其他存储介质。下边是一个符合STL规范的空间配置器的必要接口:allocator::value_typeallocator::pointerallocator::const_pointerallocator::referenceallocator::const_referenceallocator::size_typeallocator::differenc 阅读全文

posted @ 2013-07-30 18:54 语行 阅读(1385) 评论(0) 推荐(0) 编辑

2013年7月22日

摘要: 网络编程中,我们经常讨论等待某个描述符准备好I/O(读/写)或者等待其上发生一个待处理的异常条件。尽管可读性和可写性对于普通文件这样的描述符显而易见,然而对于引起诸如select返回套接字“就绪”的条件我们必须讨论的更明确些。套接字准备好读的条件a)该套接字接受缓冲区中的数据字节数大于等于套接字接受缓冲区低水位标记的当前大小。对这样的套接字执行读操作不会阻塞并将返回一个大于0的值(也就是返回准备好读入的数据)。我们可以使用SO_RCVLOWAT套接字选项设置该套接字的低水位标记。对于tcp和udp套接字而言,其默认值为1。 b)该套接字的读半部关闭(也就是接受了FIN的tcp连接)。对这样的. 阅读全文

posted @ 2013-07-22 21:42 语行 阅读(1528) 评论(0) 推荐(0) 编辑

2013年7月3日

摘要: 我们知道,一个基于TCP/IP的客户端-服务器的程序中,正常情况下,我会是启动服务器使其在一个端口上监听请求,等待客户端的连接;通过TCP的三次握手,客户端能够通过socket建立一个到服务器的连接;然后,两者就可以基于这个socket连接通信了。连接结束后,客户端(进程)会退出;在不需要继续处理客户请求的情况下,服务器(进程)也将退出。而且,当一个进程退出的时候,内核会关闭所有由这个进程打开的套接字,这里将触发TCP的四次挥手进而关闭一个socket连接。但是,在一些异常的情况下,譬如:服务器进程终止、服务器主机奔溃/奔溃后重启、服务器关机的情况下,客户端向服务器发起请求的时候,将会发生什. 阅读全文

posted @ 2013-07-03 20:58 语行 阅读(22870) 评论(0) 推荐(0) 编辑

2013年7月1日

摘要: 给进程设置僵尸状态的目的是维护子进程的信息,以便父进程在以后某个时间获取。这些信息包括子进程的进程ID、终止状态以及资源利用信息(CPU时间,内存使用量等等)。如果一个进程终止,而该进程有子进程处于僵尸状态,那么它的所有僵尸子进程的父进程ID将被重置为1(init进程)。继承这些子进程的init进程将清理它们(init进程将wait它们,从而去除僵尸状态)。 但通常情况下,我们是不愿意留存僵尸进程的,它们占用内核中的空间,最终可能导致我们耗尽进程资源。那么为什么会产生僵尸进程以及如何避免产生僵尸进程呢?下边我将从这两个方面进行分析。 僵尸进程的原因 我们知道,要在当前进程中生成一个子进程,一. 阅读全文

posted @ 2013-07-01 19:52 语行 阅读(32618) 评论(4) 推荐(3) 编辑