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

               。。。

  • 相关阅读:
    Android RSS阅读器
    X86汇编语言学习教程之1 ————前言
    beanstalk源码剖析——概述
    从软件质量看如何写代码(1)
    软件开发模型
    软件质量思考
    数据结构概述
    Don't Distract New Programmers with OOP(转)
    Linus Torvalds’s Lessons on Software Development Management(转)
    谈测试驱动开发
  • 原文地址:https://www.cnblogs.com/luosongchao/p/3408376.html
Copyright © 2011-2022 走看看