3

【笔记】C++内存分区模型

 1 year ago
source link: https://feiju12138.github.io/2022/08/14/C-%E5%86%85%E5%AD%98%E5%88%86%E5%8C%BA%E6%A8%A1%E5%9E%8B/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

C++内存分区模型学习笔记

内存分区模型

  • 程序运行前划分的区域
  • 存放函数体的二进制代码,由操作系统进行管理
  • 代码区的特点
    • 共享:多次执行相同的程序不会重复在代码区生成
    • 只读:防止程序意外的修改它的指令
  • 程序运行前划分的区域
  • 程序结束后由操作系统释放
  • 存放全局变量、静态变量、常量(字符串常量、const修饰的全局变量(全局常量))
  • 程序运行后划分的区域
  • 由编译器自动分配和释放
  • 存放函数值、局部变量、函数的形参、const修饰的局部变量(局部常量)等
  • 注意事项
    • 返回值不要返回局部变量的地址,因为栈区的数据在函数执行完后自动释放
  • 程序运行后划分的区域
  • 由开发者分配和释放(若开发者不释放,程序结束时由操作系统回收)
  • 通过new关键字开辟堆区数据,通过delete关键字释放堆区数据

全局变量和局部变量

#include<iostream>

// 全局变量
int global_a = 10;

// const修饰的全局变量
const int const_global_a = 10;

int main() {
// 局部变量
int a = 10;

// 静态变量
static int static_a = 10;

// const修饰的局部变量
const int const_a = 10;
}

堆区数据的管理

手动开辟堆区数据

  • 通过new关键字,开辟堆区数据
  • 返回堆区数据的地址
数据类型 * 指针名 = new 数据类型(数据值);

开辟数组数据

  • 返回堆区数组首元素地址
数据类型 * 指针名 = new 数据类[数组长度];

手动释放堆区数据

  • 通过delete关键字,释放堆区数据
delete 指针名;

释放数组数据

delete[] 指针名;

哔哩哔哩——黑马程序员


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK