ag旗舰厅官网_ag旗舰厅下载客户端

热门关键词: ag旗舰厅官网,ag旗舰厅下载客户端

计算机网络

当前位置:ag旗舰厅官网 > 计算机网络 > c语言模拟达成oc引用计数

c语言模拟达成oc引用计数

来源:http://www.pedaLyourcycLe.com 作者:ag旗舰厅官网 时间:2019-11-12 04:58

c语言模拟完毕oc引用计数,oc援引计数

#include<stdio.h>

#include<stdlib.h>

//在c中引进 引用计数机制

// 要解决的标题:  1,指向某块动态内部存款和储蓄器的指针有多少个?

//                    应该让那块动态内部存款和储蓄器记录指针的数目

//                    所以开垦的动态内部存款和储蓄器大小应该取多大?

//                    如若:c的指针供给开垦n个字节,

//                    那么实际上应该开拓n+4个字节

//                    假设c中: void *p = xalloc(8) 

//                          则:实际上在xalloc中应当调:

//                              int *realp =malloc(12)  

//                    假若内部存款和储蓄器如下:

//                      [_ _ _ _ _ _ _ _ _ _ _ _]

//                      ^        ^

//                      |        |

//                      |        |

//                    realp      p 

//

//                    释放进程:  xrelease(p) 

 

//那么些函数对应oc 的 alloc方法

void * xalloc(int size)

{

    int *realp = malloc(size+4);

    /**realp=1;  */

    realp[0]=1;

    return realp+1;

}

 

//对应oc的release方法

void xrelease(void *p)

{

   int * realp = (int *)p-1;

   if(realp[0]==1 )

   {

        printf("内存[%p]在被真正释放...n",p);

        free(realp);

   }

   else

        realp[0]--;

}

//对应oc的retain方法

void * xretain(void *p)

{

    int * realp = (int *)p-1;

    realp[0]++;

    return p;

}

 

//对应oc的 retainCount方法

int xretainCount(void *p)

{

    return *((int*)p-1);

}

 

int main(int argc, char **argv)

{

    int *p = xalloc(4); //p指向的内部存款和储蓄器的计数为: 1

    printf("p:[%p]针没错内存的计数为:%dn",p, xretainCount(p));

 

    int *q = xretain(p);//p指向的内部存款和储蓄器的计数为: 2 

    //   q = [p retain];

    

    printf("p:[%p]本着的内部存款和储蓄器的计数为:%dn", p,xretainCount(p));

 

    xrelease(p); //p指向的内部存款和储蓄器的计数为: 1

    printf("q:[%p]针没错内部存款和储蓄器的计数为:%dn",q, xretainCount(q));

    xrelease(q); //q指向的内部存款和储蓄器会被真正自由掉

    return 0;

  //叁个大神写的模拟援用计数机制

}

#include stdio.h #include stdlib.h // 在 c 中引进 援引计数机制 // 要解决的题目 : 1, 指向某块动态内部存款和储蓄器的指针...

本文由ag旗舰厅官网发布于计算机网络,转载请注明出处:c语言模拟达成oc引用计数

关键词: