Linux线程栈内存总结
何为线程栈空间泄露? 何为anon内存? 虚拟内存、物理内存、anon内存的联系 anon与线程的联系 glibc源码库线程创建与销毁anon关系 使用pmap分析虚拟地址空间以及anon内存 何为线程栈空间泄露? 【栈空间泄露】:简单了说就是,创建了线程,系统分配了内存,但是由于异常操作,没有把之前申请的内存还给操作系统,缓存在进程中,导致这块的内存被占用,系统无法分配内存给其他进程。 从用户角度,线程创建后,未设置线程为detach属性,pthread_detach()、pthread_join()销毁函数。 从内存映射角度,在进程中缓存一些无法利用的anon内存。 从系统栈空间分配角度,这些运行结束但是未销毁的线程,既不放在stack_used队列里,也不放在stack_cache,从而线程栈空间不会被调度到。 何为anon内存? 仅个人观点,在操作系统上运行进程,其实是经过两次映射。一次是用户程序到系统配置器分配的虚拟内存申请,一次是虚拟地址空间到物理空间地址的映射,如果是第二次映射建立前,在申请物理空间,未填充物理页内容,建立映射后,仅仅代表已经分配了内存anon,ps:物理空间最小管理单元是“页”。 虚拟内存 操作系统给用户程序的假象地址,与物理内存建立映射关系。 物理内存 类似物理存储器DRAM anon内存 1.调用malloc、brk