首页 > 其他 > 详细

内存管理

时间:2015-04-23 23:07:31      阅读:259      评论:0      收藏:0      [点我收藏+]

1  内存五大区  

    栈    堆    静态区  常量区  代码区

2

    int result = 0;

    //calloc和malloc功能一样,都是在堆区开辟一块新的空间,唯一不同的是,calloc还把空间重启了一下

    //第一个参数是分配多少个房间

    //第二个参数是每个房间多少字节

 

    //realloc 追加空间, 如果空间地址够用,直接用原来的空间地址就行,

    //如果追加空间不够,重新开辟新的空间,并返回新的地址

    //系统会帮我们拷贝原来的空间的内容到新的空间,并释放原来的老空间

    //我们释放新空间即可

    int *p = malloc(12);

    int *q = calloc(3 , 4);

 

    memset(p , 0 , 12);//逐个字节设置

    

    for (int i = 0; i < 3; i++) {

        *(p + i) = arc4random() % 3;

        

        printf("%d" , *(p + i));

    }

    printf("\n*********\n");

    for (int i = 0; i < 3; i++) {

        *(q + i) = arc4random() % 1;

        printf("%d" , *(q + i));

    }

    printf("\n**********\n");

    result = memcmp(p , q , 12);//比较两个地址里面的内容

    if (result == 0) {

        printf("GOOD\n");

    }else{

        printf("FALEN");

    }

    

    free(p);

    p = NULL;

    free(q);

    q = NULL;

 3

//在堆里申请一块空间,存放二维数组

    int (*a)[4] = malloc(sizeof(int) * 12);

    for (int i = 0; i < 3; i++) {

        for (int j = 0; j < 4; j++) {

            *(*(a + i)+ j) = arc4random() % 30 + 1;

        }

    }

    

    for (int i = 0; i < 3; i++) {

        for (int j = 0; j < 4; j++) {

            printf("%d\t" , *(*(a + i) + j));

        }

        printf("\n");

    }

4

      int a = 6;

      void *p = &a; //void *表示泛型指针变量

      printf("%d\n" , *(int *)p);//先强制转化整形指针 再取内容

       int b = 7;

      printf("%.3f\n" , (float)b);

 

内存管理

原文:http://www.cnblogs.com/fengkuangIT/p/4451862.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!