内存管理
文章平均质量分 64
huzai9527
这个作者很懒,什么都没留下…
展开
-
glibc 堆的管理
堆介绍结构示意图N位:define NON_MAIN_ARENA 用于表示是否属于主线程,0表示主线程的堆块结构,1表示子线程的堆块结构M位:define IS_MAPPED 0X2 用于表示是否由mmap分配,0表示由堆块中的top chunk分裂产生,1表示由mmap分配P位:define PREV_ISUSE 0x1 用于表示上一堆块是否处于空闲状态,0表示处于空闲状态,1表示处于使用状态。主要用于来判断free是否能够上一堆块进行合并堆空闲块管理结构bin原创 2021-01-21 09:36:30 · 199 阅读 · 0 评论 -
glibc TCache机制
TCache机制相关的宏#if USE_TCACHE/* We want 64 entries. This is an arbitrary limit, which tunables can reduce. */# define TCACHE_MAX_BINS 64# define MAX_TCACHE_SIZE tidx2usize (TCACHE_MAX_BINS-1)/* Only used to pre-fill the tunables. */# define tidx原创 2021-01-20 15:06:12 · 1186 阅读 · 0 评论 -
glibc __libc_free() 源码分析
__libc_free()检查是否存在 hook函数,如果有就执行void__libc_free (void *mem){ mstate ar_ptr; mchunkptr p; /* chunk corresponding to mem */ void (*hook) (void *, const void *) = atomic_forced_read (__free_hook); if (__builtin_exp原创 2021-01-20 11:45:30 · 1073 阅读 · 0 评论 -
__libc_malloc()源码阅读
malloc 源码chunk 与 mem 指针头部的转换(mem 指向用户申请的内存空间)/* conversion from malloc headers to user pointers, and back */#define chunk2mem(p) ((void *) ((char *) (p) + 2 * SIZE_SZ))#define mem2chunk(mem) ((mchunkptr)((char *) (mem) -2 * SIZE_SZ))检查分配给用户的内存是否对原创 2021-01-19 16:16:31 · 1621 阅读 · 0 评论 -
glibc堆概述
glibc堆概述1.内存管理与堆程序内存布局brk() 和 sbrk()堆的属性是可读可写的,大小通过sbrk和brk进行控制。函数描述NAME brk, sbrk - change data segment sizeDESCRIPTION brk() and sbrk() change the location of the program break, which de‐ fines the end of the proce原创 2021-01-19 16:12:48 · 224 阅读 · 0 评论