自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 STL空间配置器(三)

第二级配置器 : --->_default_alloc_template:       第二级配置器多了一些机制,避免太多小额区块造成内存的碎片,小额区块带来的不仅仅是内存碎片,配置时额外的负担也是一个大问题。     如下图:第二级配置器的做法是如果区块够大,超过128bytes时,就移交第一级配置器处理。当区块小于128bytes时,则以内存池(memory pool)

2017-11-01 13:00:13 258

原创 STL空间配置器(二)

空间的配置与释放------>std::alloc上面是对象的构造与析构行为,那么接下来我们看看内存的配置与释放。(1)空间配置发生在对象构造前,空间释放发生在对象析构后。(2)由负责(3)SGI对此的设计哲学如下:       (a)向system heap要求空间       (b)考虑多线程状态       (c)考虑内存不足时的应变措施       (d)考

2017-10-31 18:28:24 220

原创 STL空间配置器(一)

这里主要说的是具备次配置力的SGI空间配置器。SGI STL的配置器与众不同,也与标准规范不同,其名称是alloc而不是allocator,而且不接受任何参数。比如:Vector>  iv; //此写法错误Vector  iv;//此写法正确注意:SGI STL的每一个容器都已经指定其缺省的空间配置器为alloc。SGI STL也定义了一个符合部分标准,名为alloca

2017-10-31 17:58:33 218

原创 KMP算法(相对于朴素查找算法的比较)

1.朴素查找算法:我们对于字符串匹配用的最多的是朴素查找算法。代码如下:int BF(const char *str,const char *sub){int lenstr=strlen(str);int lensub=strlen(sub);assert(str != NULL && sub != NULL); int i=0;int j=0;whil

2017-10-19 23:07:00 933

原创 浅谈nginx内存池(五)

剩下的就是如何实现chain,chain其实也就是多个buf组合而成的,它主要是用来缓存一些未发出去的,或者接受buf以及writev以及readv而存在的。buf的实现其实就是一个单链表。这里取得一个chain后直接返回供给其他模板使用。说明:单独创建缓冲区ngx_buf_t是没办法形成回收和管理机制的,所以需要创建ngx_chain_t缓冲区链表结构,用来管理整个缓冲区。具体代码如

2017-10-18 15:10:13 186

原创 指针和引用的区别

1.引用:(1)定义一个引用是要开辟内存的,占4个字节,存放的是他引用的变量的地址(但引用是一个自动的指针,编译器会在底层自动对其进行解引用)测试如下:int main(){int a=10;int *p=&a;int &b=a;coutcoutcout *p=20;cout}由上可知:a和b 的地址是一样的,*p被赋值成了2

2017-10-17 21:12:23 191

原创 浅谈nginx内存池(四)

1.Nginx的buf缓冲区数据结构,主要用来存储非常大块的内存,ngx_buf_s数据结构也贯穿了整个nginx。Nginx的缓冲区设计也是非常灵活的:(1)可以自定义管理业务层面的缓冲区链表。(2)可以将空闲的缓冲区链表交还给内存池pool->chain结构。缓冲区ngx_buf_t是nginx处理大数据的关键数据结构,他既应用于内存数据,也应用于磁盘数据。下面

2017-10-16 20:04:33 362

原创 浅谈nginx内存池(三)

1.之前分别说过了内存池分配小块内存以及大块内存的情况。但是如果当前的内存池已经满的时候,此时应该重新分配一块内存池,然后链接到当前的内存池的数据区指针---->ngx_palloc_block需要注意三点:(1)重新分配这个内存池的大小是和他的父内存池一样大的。(2)子内存池和父内存池是不一样的。(3)新的内存池只保存了ngx_pool_data_t这个结构,也就是说数据区直

2017-10-16 13:32:04 494

原创 浅谈nginx内存池(二)

1.接下来就进入到具体的函数中。首先是创建一个内存池----->ngx_create_pool: ///内存池的数据区的最大容量。#define NGX_MAX_ALLOC_FROM_POOL (ngx_pagesize - 1) //此处的ngx_pagesize的大小在x86下通常是4kngx_pool_t * ngx_create_pool(size_t size, ng

2017-10-15 20:32:08 232

原创 浅谈nginx内存池(一)

一直听别人说nginx的内存池设计非常巧妙,所以就去学习了一下。感觉确实很不错。在这里我就说说我的理解吧。可能有的地方理解不到位,请多谅解! 1.首先介绍一下内存池的结构://内存池的结构struct ngx_pool_t {//数据区的指针ngx_pool_data_t d;//其实也就是内存池所能容纳的最大值。

2017-10-13 20:05:43 423

原创 地址映射

1.三种地址(逻辑地址,线性地址,物理地址)逻辑地址:即逻辑上的地址,实模式下由“段基地址+段内偏移”组成;保护模式下由“段选择符+段内偏移”组成。线性地址:逻辑地址经分段机制后就成线性地址;如果不启用分页,那么此线性地址和物理地址相同。物理地址:线性地址经分页转换后就成了物理地址。 2.最早期的CPU--》8086(只有一种工作方式:实模式)而且地址总线为20位。实模式下

2017-10-11 22:13:58 2255

原创 IO复用

I/O复用:elect,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据

2017-09-23 11:55:42 694

原创 系统调用

系统调用:1.0x80中断--->系统调用引发的中断2.系统调用表:函数指针的数组3.系统调用的函数名转换:每个系统调用都有相应的系统调用号作为唯一的标识,内核维护一张系统调用表,表中的元素是系统调用函数的起始地址,而系统调用号就是系统调用在调用表的偏移量。在进行系统调用是只要指定对应的系统调用号,就可以明确的要调用哪个系统调用,这就完成了系统调用的函数名称的转换。4.系统调用的参

2017-09-23 11:47:11 247

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除