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] << "\t";
cout << endl;
}

 

使用指针的注意事项

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

2 申请的内存要释放

3 释放的内存要置空

……

 

内存泄漏

申请了内存但是没有释放

野指针

释放之后指针没有置空

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-08-18 17:53  Zhen_X  阅读(165)  评论(0编辑  收藏  举报