问题描述:

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

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

注:

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

quantize函数的代码如下:

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

      注:

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

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

             其值为结构体_strrec 的大小:

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

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

           注:

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

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

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

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

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

问题解决:

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

运行结果如下:

根据以上结果的分析:

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

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

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

           。。。

ptypes中string类的空间分配的更多相关文章

  1. Java中String类的方法及说明

    String : 字符串类型 一.      String sc_sub = new String(c,3,2);    //      String sb_copy = new String(sb) ...

  2. JDK6与JDK7中String类subString()方法的区别

    1.subString()方法的作用 subString(int beginIndex, int endIndex)方法的返回的是以beginIndex开始到 endIndex-1结束的某个调用字符串 ...

  3. java中String类学习

    java中String类的相关操作如下: (1)初始化:例如,String s = “abc”; (2)length:返回字符串的长度. (3)charAT:字符操作,按照索引值获得字符串中的指定字符 ...

  4. c++中string类的详解

    ,<时返回-1,==时返回0  string的子串:string substr(int pos = 0,int n = npos) const;//返回pos开始的n个字符组成的字符串strin ...

  5. 标准C++中string类的用法

    转自博客园:http://www.cnblogs.com/xFreedom/archive/2011/05/16/2048037.html 相信使用过MFC编程的朋友对CString这个类的印象应该非 ...

  6. c++中string类的具体解释

    通过在站点上的资料搜集,得到了非常多关于string类使用方法的文档,通过对这些资料的整理和增加一些自己的代码,就得出了一份比較完整的关于string类函数有哪些和如何用的文档了! 以下先罗列出str ...

  7. 关于Java中String类的hashCode方法

    首先来看一下String中hashCode方法的实现源码 public int hashCode() { int h = hash; if (h == 0 && value.lengt ...

  8. 在java中String类为什么要设计成final

    在java中String类为什么要设计成final? - 胖胖的回答 - 知乎 https://www.zhihu.com/question/31345592/answer/114126087

  9. 【转载】Java中String类的方法及说明

    转载自:http://www.cnblogs.com/YSO1983/archive/2009/12/07/1618564.html String : 字符串类型 一.      String sc_ ...

随机推荐

  1. ASP.NET中@Page指令中的AutoEventWireup

    AutoEventWireup:指示控件的事件是否自动匹配 (Autowire).如果启用事件自动匹配,则为 true:否则为 false.默认值为 true.如果设为false,则事件不可用.有关更 ...

  2. WCF帮助类

    using BJSW.ZTFX.Client.Silverlight.MapBusinessService; using System.ServiceModel; using System.SL.Ap ...

  3. PHP变量作用域以及地址引用问题

    作用域的概念: 在PHP脚本的任何位置都可以声明变量,但是,声明变量的位置会大大影响访问变量的范围.这个可以访问的范围称为作用域. 主要的常用的包括:局部变量.全局变量.静态变量. 1.局部变量:就是 ...

  4. C++判断五位以内的对称素数

    题目内容:判断一个数是否为对称且不大于五位数的素数. 输入描述:输入数据含有不多于50个的正整数n(0<n<232). 输出描述:对于每个n,如果该数是不大于五位数的对称素数,则输出“Ye ...

  5. 委托、匿名函数与Lambda表达式初步

    (以下内容主要来自<C#本质论第三版>第十二章委托和Lambda表达式) 一.委托续 上上周五看了看委托,初步明白了其是个什么,如何定义并调用.上周五准备看Lambda表达式,结果发现C# ...

  6. JAVA里的字符串,String 类简单介绍

    http://www.360doc.com/content/14/1107/23/17130779_423471141.shtml

  7. MVC中的奇葩错误,参数转对象

    在使用MVC中遇到一个神奇的错误,特此记录(我在用MVC4时遇到) 上面两张图就是一个变量名进行了修改,其他不变!form里面的参数也是一样的!喜欢尝试的可以尝试一下! 我的变量使用action时出现 ...

  8. TeXworks代码补全功能

    使用Tab键会自动补全(实在是太TM的方便了) 比如:

  9. linux命令行下使用R语言绘图

    系统:centos 6.4 64bit 环境安装参考:http://hi.baidu.com/solohac/item/4a18e78f1bef9b5825ebd99c 在R语言中可以使用png()等 ...

  10. [译]AMQP 0-9-1 Quick Reference : basic

    Basic basic.ack(delivery-tag delivery-tag, bit multiple)Support: fullAcknowledge one or more message ...