自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 分页相关宏定义

PAGE_SHIFT PMD_SHIFT PUDSHIFT PGDIR_SHIFT 指定offset字段位数 指定offset和table总位数 确定页上级目录能够映射的区域大小 确定页全局目录能够映射的区域大小  PTRS_PER_PTE,PTRS_PER_PMD,PTRS_PER_PUD,PTRS_PER_PGD:分别表示页表,页中间目录,页上级...

2018-08-22 12:09:51 354

原创 linux的brk函数源码分析读书笔记

       最近分析内存申请一系列关系,应用程序自己的内存池,malloc/tcmalloc/jemalloc对内存的管理,现在分析linux操作系统对内存申请的管理,即brk函数。        系统调用sys_brk包括两个主要函数:    do_munmap 用于内存的释放     do_brk 用于内存的申请            首先,对新申请内存的地址进行调整,判断申请内...

2018-08-20 09:02:04 950

转载 linux堆内存管理malloc分析(3)

chunk级分析1、获取分配区的锁,为了防止多个线程同时访问同一个分配区,在进行分配之前需要取得分配区域的锁。线程先查看线程私有实例中是否已经存在一个分配区,如果存在尝试对该分配区加锁,如果加锁成功,使用该分配区分配内存,否则,该线程搜索分配区循环链表试图获得一个空闲(没有加锁)的分配区。如果所有的分配区都已经加锁,那么ptmalloc会开辟一个新的分配区,把该分配区加入到全局分配区循环链...

2018-08-13 19:40:21 327

转载 linux堆内存管理malloc分析(3)

Unsorted bin当释放较小或较大的chunk的时候,如果系统没有将它们添加对应的bins中,系统就将这些chunk添加到unsorted bin中。为什么要这么做呢?这主要是为了让glibc malloc机制能够有第二次机会重新利用最近释放的chunk(第一次就是fast bins机制)。利用unsorted bin,可以加快内存的分配和释放操作,因为整个操作都不需要花费额外的时间去查...

2018-08-13 15:53:16 877

转载 linux堆内存管理malloc分析(2)

前言在上一篇文章中,详细介绍了堆内存管理中涉及到的基本概念以及相互关系,同时也着重介绍了堆中chunk分配和释放策略中使用到的隐式链表技术。通过前面的介绍,我们知道使用隐式链表来管理内存中chunk总会涉及到内存的遍历,效率极低。对此glibc malloc引入了显示链表技术来提高堆内存分配和释放的效率。所谓的显示链表就是我们在数据结构中常用的链表,而链表本质就是将一些属性相同的“节点”串...

2018-08-13 12:04:11 3572

转载 程序中两个!!作用

两个!是为了把 非0值 转换成1,而0值还是0。因为C语言中,所有 非0值 都表示真。所以!非0值 = 0,而!0 = 1。  所以!!非0值 = 1,而!!0 = 0。

2018-08-08 16:59:29 359

转载 linux堆内存管理malloc分析(1)

堆内存管理介绍dlmalloc – General purpose allocator**ptmalloc2 – glibc**jemalloc – FreeBSD and Firefoxtcmalloc – Googlelibumem – Solaris本文主要学习介绍在linux glibc使用的ptmalloc2实现原理。本来linux默认的是dlmalloc,但是由于...

2018-08-06 12:29:32 1748 1

转载 VC6内存管理malloc(3)

ioinit申请内存0x130字节。把007d0ed0地址传给上游,之后调整剩余内存大小为ec0,ff0-130,因为在debug模式,所以还需要调整指针,返回实际使用内存的指针。00000002表示CRT_BLOCK,main函数内内存malloc,标记为NORMAL_BLOCK。程序执行到最后,链表中还有_CRT_BLOCK,不是内存泄漏,如果有NORMAL_BLOCK才是内存泄漏。内存申请完...

2018-08-05 19:30:20 591

转载 VC6内存管理malloc(2)

heap_init调用后,调用_ioinit,第一次进行内存调用malloc,申请256字节,在debug模式,使用malloc_dbg函数。之后调用_nh_malloc_dbg,nh_malloc_dbg调用_heap_alloc_dbg。对256字节的内存申请,还需要加上额外的管理信息,附加到真正的内存申请,附加后的内存大小是真正申请内存的大小。第3个指针指向调用的文件名,第4个变量,...

2018-08-05 17:16:20 473

转载 VC6内存管理malloc(1)

vc6程序main之前和之后的示意图(call stack),执行前内核先调用mainCRTStartup()函数,_heap_alloc_base()函数对内存分配有两种情况,小于1016字节,调用_sbh_alloc_block,管理小内存。大于1016字节使用windows调用HeapAlloc进行内存分配。vc10程序call stack,sbh调用深埋到OS的HeapAlloc内...

2018-08-05 16:24:24 877

空空如也

空空如也

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

TA关注的人

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