• 内存划分


      1、//内存区域的划分(从低到高)
        //1.栈区
        //2.堆区++++++++++++++重点+++++++++++
        //3.静态区(全局区)
        //4.常量区
        //5.代码区
    2、static int number = 10;//被static 修饰的全局变量生命周期随着程序的创建而创建,随着程序的消失而消失;
    3、//局部变量:定义在函数内部的变量就叫做局部变量,局部变量都是存储在栈区
    3、//内存管理的时候系统也是遵循内存对齐原则,因为这样可以提高内存的分配效率
    4、//静态区(全局区)
    //有static 修饰的变量存放在静态区,静态区的变量有一个特点,整个程序运行中,只被初始化一次;如果人为未初始化,系统默认初始化为0
    5、//系统提供的函数由于使用比较频繁,我们把它存放在栈区,原因是栈区的内容会被反复的创建销毁,不需要我们去管理内存还是因为栈区的内存开辟和释放的内存
    6、//代码区:程序中运行的函数或者变量等等语句都会编译成CPU指令,存放在代码区;
    7、 malloc calloc  realloc memset  (要做释放free(p);操作并赋值p =Null)
    memcpy  memcmp (不用做释放操作) 
     //  free(p);//释放掉p 指向的堆区空间,只是标记删除,不清空里面的内容
    //   free(p); 过度释放,释放多次,过度释放会造成crash 崩溃
    p = NULL;  //指向的是无效的空间,防止野指针错误
    (1)malloc:申请内存的函数
    //   void   *malloc( size_t)
    //   void * ,泛类型,void * 返回的指针可以赋值给任何类型的指针,int * ,float* ,char *,short*
    //  size_t 代表申请多少个字节的大小的内存空间
    //   malloc  的作用,申请的 size 个字节大小的空间,并把申请的空间首地址返回
    (2) //calloc(size_t, size_t)
        //两个参数的意思;表示申请n个size大小的空间,返回时申请空间的首地址,但是它在申请空间的时候会多一步处理,清除么一个字节里的内容,也就是清零操作,正是因为calloc 多了一 步 清零操作,执行效率要比malloc低;
    //realloc(p, n)  //内存的重新分配,第一个参数是地址,第二个参数是重新分配的内存大小
    (4)//使用relloc 重新分配空间的时候,若再原有分配空间的基础上可以连续载增加   n (原有空间大小 )个空间大小,指针指向不会改变;若这时不可以连续增加(n - 原有空间大小),会将之前的空间给释放掉,然后再去堆区的其他位置开辟连续的n个空间大小的内存,指针的指向发生改变了;
    注意:重新分配的空间需要接收
    //    int *p6 = malloc(12);
    //    *p6 = 10;
    //    *(p6 + 1) = 20;
    //    *(p6 + 2) = 30;
    //        printf("之前的地址:%p ",p6);
    //     p6 = realloc(p6, 20);//重新分配空间的大小
    //  printf("之前的地址:%p ",p6);
    //    *(p6 + 3) = 40;
    //    *( p6 + 4) = 50;
    //    //重新分配的空间会把之前空间的内容给拷贝过来,放到相对的位置,所以需要遍历
    //    for (int i = 0; i < 5; i ++) {
    //        printf("%d ",*(p6 + i));
    //    }
    //    free(p6);
    //    p6 = NULL;
    (3)memset(开始地址, n, size);     给定一个开始地址,将size字节的空间大小内的数据置为n,若n为0,size为10,就是把10个字节中的数据置为0;
    (4) memcpy(dest, source, n);     //从源source指针开始的位置,向目的指针拷贝n个字节的数据;注意:前面的空间要足够大;
    (5)memcmp(p1, p2, n);       比较p1 和 p2 指向的内存里的内容是否相同,比较n 个字节,返回值是0,相等;不同的时候返回差值;比较过程是逐个字节比较,返回第一对对应字节位置不同数据的差值
  • 相关阅读:
    Step by step Dynamics CRM 2013安装
    SQL Server 2012 Managed Service Account
    Step by step SQL Server 2012的安装
    Step by step 活动目录中添加一个子域
    Step by step 如何创建一个新森林
    向活动目录中添加一个子域
    活动目录的信任关系
    RAID 概述
    DNS 正向查找与反向查找
    Microsoft Dynamics CRM 2013 and 2011 Update Rollups and Service Packs
  • 原文地址:https://www.cnblogs.com/xlsn0w/p/4856260.html
Copyright © 2020-2023  润新知