zoukankan      html  css  js  c++  java
  • 11_内存区域的划分

    内存区域的划分

    1 栈区

    局部变量:{}里面的普通变量

    2 堆区

    手动申请的内存

    3 常量区

    存储常量:100 ‘a' "gyiukl"

    4 静态全局区

    静态变量、全局变量

    静态变量(static):局部静态变量、全局静态变量

    静态变量默认值为0

    #include <iostream>
    using namespace std;
    // 全局静态变量
    static int num;
    // 全局普通变量
    int b = 9;
    int main()
    {
    // 局部普通变量
    int c = 8;
    // 局部静态变量
    static int a = 7;
    return 0;
    }

    全局:全局静态变量 和 全局普通变量

    生存周期:

    程序开始时分配内存 程序结束时回收内存

    作用域:

    全局静态变量:当前文件
    全局普通变量:当前项目(extern)

    局部:局部普通变量 和 局部静态变量

    生存周期:

    局部静态变量:程序开始时分配内存 程序结束时回收内存
    局部普通变量:{}开始时分配内存 {}结束时回收内存

    作用域:

    当前大括号

     

    静态变量 只定义一次

        for (int i = 0; i < 10; i++)
    {
    static int number = 1;
    cout << number << endl;
    number++;
    }
    for (int i = 0; i < 10; i++)
    {
    int number = 1;
    cout << number << endl;
    number++;
    }

     

    5 代码区

    代码

     

     

    void*指针

    1 void*可以表示任意类型的地址

    2 不能自增自减(不知道一个单位是多少)

     

    手动申请内存

    手动申请 手动释放 手动置空

    1 C语言方法

    申请:malloc(字节数)
    释放:free(地址)
        int* p = (int*)malloc(sizeof(int)*10);
    p[0] = 9;
    p[1] = 4;
    cout << p[1] << endl;
    free(p);
    申请:calloc(单个字节数,个数)
    释放:free()
        int* p1 = (int*)calloc(sizeof(int),10);
    for (int i = 0; i < 10; i++)
    p1[i] = i;
    for (int i = 0; i < 10; i++)
    cout << p1[i] << endl;

    2 C++方法

    申请:new 类型[个数]
    释放:delete 地址;
        int* p2 = new int;
    *p2 = 7;
    cout << *p2 << endl;
    delete p2;

    int* p3 = new int[10];
    for (int i = 0; i < 10; i++)
    p3[i] = i;
    for (int i = 0; i < 10; i++)
    cout << p3[i] << endl;
    delete p3;
        int** pp = new int*[10];
    for (int i = 0; i < 10; i++)
    pp[i] = new int[10];

    for (int i = 0; i < 10; i++)
    for (int j = 0; j < 10; j++)
    pp[i][j] = i * 10 + j;
    for (int i = 0; i < 10; i++)
    {
    for (int j = 0; j < 10; j++)
    cout << pp[i][j] << " ";
    cout << endl;
    }

     

    使用指针的注意事项

    1 指针要有指向 没有指向的置空

    2 申请的内存要释放

    3 释放的内存要置空

    ……

     

    内存泄漏

    申请了内存但是没有释放

    野指针

    释放之后指针没有置空

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    HTTP协议超级详解
    css面试题(一)
    win10开机启动项管理
    Notion快捷键
    [C++]std::sort()函数使用总结
    配置环境变量时java命令可以使用,javac不能使用
    安卓4:修改系统默认颜色
    vue 安装sass-loader 提示python等
    vue echarts 柱状图 变色 显示
    k8s-生产环境部署django项目k8s-dashboard管理系统
  • 原文地址:https://www.cnblogs.com/ZhenXin0101/p/13524875.html
Copyright © 2011-2022 走看看