C++栈区、堆区、全局静态区、代码区的介绍

145 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

示例代码

#include <iostream>
// 全局变量 存储在静态区
int IntNum = 0;
// 静态全局变量 存储在静态区
static int StaInitNum = 0;

int main(int argc, char **argv)
{
    // 静态局部变量 存储在静态区
    static int MainStaInitNum = 0;
    // 局部变量 存储在栈区
    char c_str[] = "hello world";
    // 指针变量 存储在栈区
    char *p = c_str;
    // 指针变量 通过new申请的动态内存存储在堆区
    char *p_str = new char[10];
    // 执政变量 存储在栈区 ”hello world“存储在常量区
    char *_str = "hello world";

    // 释放申请的动态内存
    delete[] p_str;
    return 0;
}

代码区:存放程序代码,在计算机中以二进制方式保存。

栈区:存放函数内的局部变量,形参和函数返回值,栈区的数据由操作系统分配也是由操作系统自动释放。

堆:使用malloc和new申请的内存块,如果我们不手动释放,在程序结束后系统会自动回收,一般在编写程序的过程中需要手动释放申请的内存(free和delete)否则可能会造成内存泄漏问题。

全局/静态存储区:全局变量和静态变量被分配到同一块内存中,在C语言中还分:在未初始化的全局变量和静态变量、已初始化的全局变量和静态变量。但是在C++中没有这个区分,他们共同占用同一块内存区。

常量存储区:存放常量,不允许修改。