tinyxml2中函数理解
来源:互联网 发布:淘宝开店卖家中心在哪 编辑:程序博客网 时间:2024/06/13 09:46
{
TIXMLASSERT( sizeof( XMLElement ) == _elementPool.ItemSize() );
XMLElement* ele = new (_elementPool.Alloc()) XMLElement( this );
ele->_memPool = &_elementPool;
ele->SetName( name );
return ele;
}
define TIXMLASSERT( x ) if ( !((void)0,(x))) { __debugbreak(); }
逗号表达式的关键是,整个表达式的值只取第二个表达式的值;
非void类型显式转换为void类型表达式,用于避免一些代码静态检查工具的警告(void)0,这里避免的警告就类似于if(1==1)这种
内存池
MemPoolT< sizeof(XMLElement) >_elementPool;
MemPoolT< sizeof(XMLAttribute) > _attributePool;
MemPoolT< sizeof(XMLText) > _textPool;
MemPoolT< sizeof(XMLComment) > _commentPool;
定义了四个内存池,内存池用于分配大量大小相同的小对象的技术。通过该技术可以极大加快内存分配/释放过程。
内存池只涉及两个常量:MemBlockSize、ItemSize(小对象的大小,但不能小于指针的大小,在32位平台也就是不能小于4字节),以及两个指针变量MemBlockHeader、FreeNodeHeader。
内存块(MemBlock)和自由内存结点(FreeNode)。内存块大小一般固定为MemBlockSize字节(除去用以建立链表的指针外)。内存块在申请之初就被划分为多个内存结点(Node),每个Node大小为ItemSize(小对象的大小),计MemBlockSize/ItemSize个。这MemBlockSize/ItemSize个内存结点刚开始全部是自由的,他们被串成链表。
也就是:内存块<-内存结点->链表
内存申请过程分为两种情况:
在自由内存结点链表(FreeNodeList)非空。
在此情况下,Alloc过程只是从链表中摘下一个结点的过程。
否则,意味着需要一个新的内存块(MemBlock)。
这个过程需要将新申请的MemBlock切割成多个Node,并把它们串起来。
MemPool技术的开销主要在这
其中指针变量MemBlockHeader是把所有申请的内存块(MemBlock)串成一个链表,以便通过它可以释放所有申请的内存。FreeNodeHeader变量则是把所有自由内存结点(FreeNode)串成一个链。
- tinyxml2中函数理解
- C++中使用TinyXML2
- TinyXML2
- C++中解析XML tinyXML2
- 在C++中使用TinyXML2解析xml
- 在C++中使用TinyXML2解析xml
- 在C++中使用TinyXML2解析xml
- 在C++中使用TinyXML2解析xml
- 在C++中使用TinyXML2解析xml
- 在C++中使用TinyXML2解析xml
- 在C++中使用TinyXML2解析xml
- 在C++中使用TinyXML2解析xml
- qt中tinyxml2的基本使用方法
- 在C++中使用TinyXML2解析xml(2)
- 《转》 在C++中使用TinyXML2解析xml
- cocos中使用tinyxml2遇到的一个小问题
- TinyXML2 学习
- TinyXML2 学习
- jQuery 事件
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- #第48天#跑步#
- tnsping时快时慢,ping很快
- 文章标题
- tinyxml2中函数理解
- Qt 常用类 (9)—— QWidget
- cocoaPods update出错:incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityEr
- 绘制简单的矩形
- Android判断App是否在前台运行
- 20150504工作日志(遮盖效果,点击div以外的地方就收起内容,ajax的局部刷新连接)
- 蒲公英平台用法的最佳实践(Android篇)
- zoj3870Team Formation
- 系统自带样式theme