zoukankan      html  css  js  c++  java
  • ptypes中string类的空间分配

    问题描述:

               在学习ptypes中string类的空间分配时,经常使分配的空间超出实际所需的空间

    使用的分配函数是:_alloc函数

    alloc

    注:

           在_alloc函数中调用了quantize(numchars)函数确定分配空间的大小

    quantize函数的代码如下:

    quantize

            在quantize函数中调用memquantize函数如下:

    memquantize

          注:

                在使用quantize函数确定分配空间的时候,我们总是按照大小为 numchars+1+strrecsize

                 的初始值调用memquantize函数,其中strrecsize的定义如下:

    strrecsize

                 其值为结构体_strrec 的大小:

    _strrec

                其中包含了string中字符的个数length和引用string的个数refcount

                在使用string过程中,定义如下宏来处理_strrec信息:

    base

               注:

                    其中STR_BASE(x)     (_pstrrec(x)-1)       的宏定义很奇妙,将x强制转换为_strrec 结构体指针

                    -1的操作是为了在string 类中char *data指向地址的前一个_strrec空间。

                   在实际中经常见到如下调用:

    data

                  其中data为char *指针,指向地址为分配空间的首地址+strrecsize

                  而STR_LENGTH(data)调用则将length和refcount信息写入data之前的strrecsize结构体空间中。

    问题解决:

            quantize函数分配空间的含义如下:

    quantize

    运行结果如下:

    result

    根据以上结果的分析:

                ~63=1111...1110000000  & (a+63)

               a在32-64的时候quantize(a+63)值为64

               a在65-128的时候quantize(a+63)的值为128

               。。。

  • 相关阅读:
    乐观锁悲观锁及其使用场景
    inner join, left join, right join的作用是什么
    主键和唯一索引的区别
    在排序数组中查找元素的第一个和最后一个位置
    寻找旋转排序数组中的最小值
    [模板] 最小费用最大流
    CF878E Numbers on the blackboard
    CF1286F Harry The Potter
    CF1368H1 Breadboard Capacity
    CF1442E Black, White and Grey Tree
  • 原文地址:https://www.cnblogs.com/luosongchao/p/3408376.html
Copyright © 2011-2022 走看看