• 内存分区


    1.栈

      局部变量

    2.堆

      程序运行时动态申请的空间

    3.BSS段

      未初始化的全局变量和静态变量

    4.数据段

      完成初始化的全局变量和静态变量,一级常量字符串,所以数据段又称为静态区

    5.代码段

      程序运行代码所占用的空间

    常见的动态分配内存分配函数

    C语言中提供了三个动态分配内存的函数:malloc、calloc 和 realloc
    
    1.malloc
        它的使用方法 void * malloc(unsigned size) ,传入一个无符号的长度,其中size是指分配内存的字节
    
        void *malloc(unsigned size),包含在库函数<stdlib.h>中,作用是在内存的堆区分配一个大小为size的连续空间,如果分配内存成功,函数返回新分配内存的首地址,否则,返回NULL 
        注意:鉴于以上这点,所以一般写程序的时候需要判断分配内存是否成功
    
        例:
        int *p ;
        p=(int* ) malloc(sizeof(int));
        if(p!=NULL)
            .....//需要执行的语句
        else
            ...//打印分配内存不成功出错信息
    
        注意: maclloc 申请的内存空间,如果我们不赋值,存放的是一些随意数(垃圾数)
        //所以有必要的时候可以给申请的空间进行初始化
         memset(p,48,16);
    
    2.calloc 
         分配指定快数和长度的内存空间   
        格式:
            calloc(快数,长度); //他们的地址也是连续的
    
        注意: calloc 是会自动帮我们初始化为0的
    
    3.realloc
          可以给已经存在的空间扩充大小
    
          格式:realloc(void*,size_t);
    
          p=realloc(p,40*sizeof(int));
      
    

    C中解决内存泄露问题

    使用free(要释放的空间的首地址)
    free(p);
    //free(p)以后,p是一个野指针
    p=NULL;才可以

      

  • 相关阅读:
    Android 源代码解析 之 setContentView
    poj 2484 A Funny Game
    BlueDroid代码分析之GKI
    Chromium多线程模型设计和实现分析
    关于template 的23个问题
    Struts2 动态结果集
    沁园春&#183;咏史
    android中常见的内存泄漏和解决的方法
    Spring整合freemarker发送邮件
    [struts2学习笔记] 第三节 创建struts 2 HelloWorld所需的六个步骤
  • 原文地址:https://www.cnblogs.com/developer-wang/p/4490885.html
Copyright © 2020-2023  润新知