Samba 源码解析之内存管理

由于工作需要想研究下Samba的源码,下载后发现目录结构还是很清晰的。一般大家可能会对source3和source4文件夹比较疑惑。这两个文件夹针对的是Samba主版本号,所以你可以暂时先看一个。这里我选择Source3。

阅读源码最好要动手编译并安装,但这里我偷个懒直接在ubuntu上安装跳过了编译步骤。首先从client开始看起。SMBclient的所有命令的对应code都在source3/client/client.c中,我们由浅入深,挑一个比较简单的命令来看下它的执行流程,将简单的命令分析透彻,然后步步深入。这里我挑选close命令,它的基本执行流程为:

第一个难题: Samba内存管理

开始费了半天劲跟踪code,发现其实samba内存管理用的是另外一个开源内存池项目Talloc,具体的使用方式可以参考link:http://talloc.samba.org/talloc/doc/html/libtalloc__tutorial.html。对照这个link看lib/talloc下的code就比较容易理解了。

时间: 2024-10-12 04:08:07

Samba 源码解析之内存管理的相关文章

redis源码解析之内存管理

zmalloc.h的内容如下: 1 void *zmalloc(size_t size); 2 void *zcalloc(size_t size); 3 void *zrealloc(void *ptr, size_t size); 4 void zfree(void *ptr); 5 char *zstrdup(const char *s); 6 size_t zmalloc_used_memory(void); 7 void zmalloc_enable_thread_safeness(v

Memcached源码分析之内存管理

先再说明一下,我本次分析的memcached版本是1.4.20,有些旧的版本关于内存管理的机制和数据结构与1.4.20有一定的差异(本文中会提到). 一)模型分析在开始解剖memcached关于内存管理的源代码之前,先宏观上分析一下memcached内存管理的模型是怎样子的: 提个建议,我觉得memcached内存管理的模型与我们平时做作业的作业本“画格子给我们往格子里面写字”的逻辑很像,一本本作业本就是我们的内存空间,而我们往里写的字就是我们要存下来的数据,所以分析的时候可以想像一下用方格作业

redis 源码分析(一) 内存管理

一,redis内存管理介绍 redis是一个基于内存的key-value的数据库,其内存管理是非常重要的,为了屏蔽不同平台之间的差异,以及统计内存占用量等,redis对内存分配函数进行了一层封装,程序中统一使用zmalloc,zfree一系列函数,其对应的源码在src/zmalloc.h和src/zmalloc.c两个文件中,源码点这里. 二,redis内存管理源码分析 redis封装是为了屏蔽底层平台的差异,同时方便自己实现相关的函数,我们可以通过src/zmalloc.h 文件中的相关宏定义

cocos2d-x 源码分析 : Ref (CCObject) 源码分析 cocos2d-x内存管理策略

源码版本来自3.x,转载请注明 cocos2d-x 源码分析总目录: http://blog.csdn.net/u011225840/article/details/31743129 1.Ref,AutoreleasePool,PoolManager Ref中包含了一个叫referenceCount的引用计数,当一个Ref类的变量被new的时候,其referenceCount的引用计数被置为1. 其中有三个重要的操作,retain,release,autorelease,下面源码分析时会详细说明

Samba 源码解析之SMBclient命令流

smbclient提供了类似FTP式的共享文件操作功能, 本篇从源码角度讲解smbclient的实现,smbclient命令的具体使用可通过help命令和互联网查到大量资料. 以下从源码角度分析一个smbclient命令是如何发到远端机器上和处理返回结果的.这里以一个简单的命令“close <fnum>”为例,分析程序的整个过程如下: step 1. cmd_close(void)位于source3/client/client.c中.每个smbclient命令都有一个类似cmd_***命名的函

Netty源码解析(4)-内存分配

ByteBuf直接与底层IO打交道 1.内存类别有哪些 2.如何减少多线程内存分配竞争 3.不同大小内存是如何分配的 内存与内存管理器的抽象 不同规格大小和不同内存类别的分配策略 内存回收 ByteBuf结构 readerIndex,表示要读数据从当前指针开始读,从0到readerIndex这段空间表示是无效的 writerIndex,必须大于readerIndex,表示要写数据从当前指针开始写,从readerIndex到writerIndex这段空间表示可以读的 capacity,必须,从wr

nginx源码解析之内存池

nginx自身实现了内存池,所有内存分配都是基于内存池来操作.基本思想是预申请一段内存空间,低于指定大小的内存(小段内存)直接从内存池中申请,超过指定大小的内存(大段内存)直接调用malloc申请.相关代码在os/unix/ngx_alloc.{c,h}和core/ngx_palloc.{c,h}. os/unix/ngx_alloc.{c,h}文件封装了内存分配的系统调用,其中: ngx_alloc调用malloc申请一段内存空间 ngx_calloc调用malloc申请一段内存空间,再调用m

f2fs源码解析(五) node管理结构梳理

node是f2fs重要的管理结构, 它非常重要! 系统挂载完毕后, 会有一个f2fs_nm_info结构的node管理器来管理node的分配. f2fs_nm_info中最让人疑惑的是几颗基数树: 490 struct f2fs_nm_info { 491 block_t nat_blkaddr; /* base disk address of NAT */ 492 nid_t max_nid; /* maximum possible node ids */ 494 nid_t next_sca

Spring IoC源码解析——Bean的创建和初始化

Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts框架,MyBatis框架等组合使用. IoC介绍 IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控