zoukankan      html  css  js  c++  java
  • 1214.1——内存分配问题

    自动分配内存:当定义为基本类型的变量的时候,系统会为这个变量自动分配内存,这个内存在堆上。当作用域结        束,系统将会自动将这个内存回收。

    动态分配内存:开发人员自己向系统申请的内存空间,申请的内存位于栈上,当作用域结束之后,系统是不会自动         回收内存的。这个内存必须由开发人员自己去释放。如果不释放,就内存泄露了。

    1、 什么时候需要动态分配内存。

    程序运行过程中,需要程序保存/记录相应的数据,但是又没有提前准备好内存,那么就需要临时动态分配内存。

    使用函数:

    void *malloc(size_t);

    size_t:希望申请的内存空间(字节byte)

    void*:系统一开始不知道你需要存放什么数据,不同的数据需要的内存空间不一样,所以默认就是给一个void*,泛指所有指针类型(char*,int *,struct*),当在使用的时候必须将void*转化为相应的类型。如果没有申请成功,那么返回值为NULL

    释放内存 free(void*)

    注意:free里面的参数必须是指针,这个指针指向必须是动态分配的。

    //计算结构体内存空间

    原理:如果结构体内部拥有多种数据类型,那么以占据内存字节数最高的类型对其

    typedef struct{

      char *name;

      int age;

    }Person;//16字节

    char*占据8个字节,int占据4个字节

    所以age变量自动向name对齐。整个占据16个字节

    typedef struct{

      char name ;

      int age;

    }Person//8字节

    typedef struct{

      char name [2];

      int age;

    }Person;//8

    typedef struct{
        char name[6];
        int age;
    }Person;//12

  • 相关阅读:
    phxpaxos状态机的管理
    redis基础
    phxpaxos的checkpoint从哪个server同步
    结合phxpaxos简单看下paxos
    levelDB实现相关概念及基础
    在变参模版出现之前,functional如何实现bind功能
    IntelliJ IDEA自动部署项目至远程服务器与传统部署项目至远程服务器的区别
    Python实现王者荣耀小助手(二)
    Python实现王者荣耀小助手(一)
    高性能网络通信框架 HP-Socket
  • 原文地址:https://www.cnblogs.com/damonWq/p/5046255.html
Copyright © 2011-2022 走看看