当前位置: 首页 > news >正文

wordpress 伪静态 后台北京网站优化专家

wordpress 伪静态 后台,北京网站优化专家,国内有做外汇的正规网站吗,wordpress淘宝联盟模板下载地址本节书摘来自华章出版社《Ceph源码分析》一书中的第2章#xff0c;第2.2节Buffer#xff0c;作者常涛#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看 2.2 BufferBuffer就是一个命名空间#xff0c;在这个命名空间下定义了Buffer相关的数据结构, 这些数… 本节书摘来自华章出版社《Ceph源码分析》一书中的第2章第2.2节Buffer作者常涛更多章节内容可以访问云栖社区“华章计算机”公众号查看 2.2 BufferBuffer就是一个命名空间在这个命名空间下定义了Buffer相关的数据结构, 这些数据结构在Ceph的源代码中广泛使用。下面介绍的buffer::raw类是基础类其子类完成了Buffer数据空间的分配buffer::ptr类实现了Buffer内部的一段数据buffer::list封装了多个数据段。 2.2.1 buffer::raw类buffer::raw是一个原始的数据Buffer在其基础之上添加了长度、引用计数和额外的crc校验信息结构如下class buffer::raw { public: char *data; //数据指针 unsigned len; //数据长度 atomic_t nref; //引用计数mutable RWLock crc_lock; //读写锁保护crc_map mappairsize_t, size_t, pairuint32_t, uint32_t crc_map; //crc校验信息第一个pair为数据段的起始和结束from,to)第二个pair是crc32校验码pair的第一字段为base crc32校验码第二个字段为加上数据段后计算出的crc32校验码。 ……}下列类都继承了buffer::raw实现了data对应内存空间的申请类raw_malloc实现了用malloc函数分配内存空间的功能。类class buffer::raw_mmap_pages实现了通过mmap来把内存匿名映射到进程的地址空间。类class buffer::raw_posix_aligned调用了函数posix_memalign来申请内存地址对齐的内存空间。类class buffer::raw_hack_aligned是在系统不支持内存对齐申请的情况下自己实现了内存地址的对齐。类class buffer::raw_pipe实现了pipe做为Buffer的内存空间。类class buffer::raw_char使用了C的new操作符来申请内存空间。 2.2.2 buffer::ptr类buffer::ptr就是对于buffer::raw的一个部分数据段。结构如下class CEPH_BUFFER_API ptr { raw *_raw; unsigned _off, _len; ……}ptr是raw里的一个任意的数据段_off是在_raw里的偏移量_len是ptr的长度。raw和ptr的示意图如图2-1所示。图2-1 raw和ptr示意图 2.2.3 buffer::list类buffer::list是一个使用广泛的类它是多个buffer::ptr的列表也就是多个内存数据段的列表。结构如下class CEPH_BUFFER_API list { std::list _buffers; //所有的ptr unsigned _len; //所有的ptr的数据总长度 unsigned _memcopy_count; //当调用函数rebuild用来内存对齐时需要内存拷贝的数据量 ptr append_buffer; //当有小的数据就添加到这个buffer里 mutable iterator last_p; //访问list的迭代器 ……}buffer::list的重要的操作如下所示。添加一个ptr到list的头部void push_front(ptr bp) { if (bp.length() 0) return; _buffers.push_front(bp); _len bp.length();}添加一个raw到list头部中先构造一个ptr后添加list中void push_front(raw *r) { ptr bp(r); push_front(bp);}判断内存是否以参数align对齐每一个ptr都必须以align对齐bool buffer::list::is_aligned(unsigned align) const{ for (std::list::const_iterator it _buffers.begin(); it ! _buffers.end(); it) if (!it-is_aligned(align)) return false; return true; }添加一个字符到list中先查看append_buffer是否有足够的空间如果没有就新申请一个4KB大小的空间void buffer::list::append(char c){ // 检查当前的append_buffer是否有足够的空间 unsigned gap append_buffer.unused_tail_length(); if (!gap) { // 如果没有空间就申请一个append_buffer! append_buffer create_aligned(CEPH_BUFFER_APPEND_SIZE, CEPH_BUFFER_APPEND_SIZE); append_buffer.set_length(0); //到目前为止没有用到 } append(append_buffer, append_buffer.append(c) - 1, 1); // 把该数据段添加到append_buffer中 }内存对齐有些情况下需要内存地址对齐例如当以directIO方式写入数据至磁盘时需要内存地址按内存页面大小page对齐也即buffer::list的内存地址都需按page对齐。函数rebuild用来完成对齐的功能。其实现的方法也比较简单检查没有对齐的ptr申请一块新对齐的内存把数据拷贝过去释放内存空间就可以了。buffer::list还集成了其他额外的一些功能把数据写入文件或从文件读取数据的功能。计算数据的crc32校验。
http://www.yutouwan.com/news/264781/

相关文章:

  • 有没有做家居服设计师看的网站如何注册网站名称
  • 如何用oss做视频网站广东建设信息网行业服务版
  • 河南网站开发优化百度分析工具
  • qq直接登录网站无需下载无锡网站制作联系电话
  • 建设工程敎育网网站星子网易云
  • 书籍网站开发多少钱档案馆建设网站
  • 网站制作合同范本网站做直播
  • 南宁做网站服务商做网站主页上主要放哪些内容
  • 江苏省品牌专业建设网站成都市小程序推广
  • 规划排版网站爱站长尾词
  • 网站建设岗位说明重庆seo网络推广平台
  • 十大免费自助建站做试试彩网站人员
  • 网站设计风西宁做网站好的公司
  • 365建站网建设网络道德教育网站不包括
  • 贵阳网站建设价格山东建设管理局网站
  • 包小盒设计网站济南做网站最好的公司
  • 商城网站模块有记事本做简易网站
  • 奉贤做网站的wordpress iis8.5
  • 轻云服务器菁英版 多个网站深圳百度关键词
  • 哪些网站推广公司大型门户网站核心技术
  • 湖南省住建云公共服务平台郑州网站优化网络建设有限公司
  • 顺德做网站的公司汉中360网站建设
  • 大同网站建设设计wordpress淘宝客个人中心
  • 青海西宁制作网站企业公司做网站费用计入什么科目
  • 品牌形象网站有哪些公司管理类培训
  • phpcms学校网站模板做同城信息网站怎么赚钱
  • 做网站哪个服务商便宜做视频背景音乐专用网站
  • 哪个网站上可以做初中数学题wordpress文章归档插件
  • 网站打开速度慢跟什么有关系南通优普网站建设团队
  • 重庆网站建设公司费用wordpress wiki使用