C++核心编程之内存分区详解

 更新时间:2022年03月28日 10:44:55   作者:Zachery.  
这篇文章主要为大家详细介绍了C++核心编程之内存分区,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

1、内存分区模型:

C++程序在执行时,将内存大方向划分成4个区域

(1)代码区:存放安徽念书体的二进制代码,由操作系统进行管理的

(2)全局区:存放全局变量和静态变量以及常量

(3)栈区:由编译器自动分配释放,存放函数的参数值,局部变量等

(4)堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收

内存四区意义:不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程

2、代码区:

在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域

代码区:

(1)存放CPU执行的机器指令(二进制的机器指令)

(2)代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可

(3)代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令

3、全局区:

(1)全局变量和静态变量存放在此

(2)全局区还包括了常量区,字符串常量和其他常量也存放在此(字符串常量和const修饰的全局变量)

(3)该区域的数据在程序结束后由操作系统释放(不是由我们来控制的)

不在全局区中的:

1、局部变量   

2、const修饰的局部变量(局部常量)

4、小结:

1.C++中在程序运行前分为全局区和代码区

2.代码区特点是共享和只读

3.全局区中存放全局变量、静态变量、常量

4.常量区中存放const修饰的全局常量和字符串常量

5、代码演示:

//程序的内存模型-内存四区-全局区
#include <iostream>
using namespace std;
//1 全局变量
int g_a = 10;
int g_b = 10;
//const修饰的全局变量,全局常量
const int c_g_a = 10;
const int c_g_b = 10;
int main() {
    //2 创建普通局部变量
    int a = 10;
    int b = 10;
    cout << "The address of local variable a is: " << &a << endl;
    cout << "The address of local variable b is: " << &b << endl;
    cout << "Global variable g_a's address is: " << &g_a << endl;
    cout << "Global variable g_b's address is: " << &g_b << endl;
    //3 静态变量 在普通变量前面加static,属于静态变量
    static int s_a = 10;
    static int s_b = 10;
    cout << "The address of static variable s_a is: " << &s_a << endl;
    cout << "The address of static variable s_b is: " << &s_b << endl;
    //4 常量
    //4.1 字符串常量
    cout << "The address of the string constant is: " << &"Hello World" << endl;
    //4.2 const修饰的变量
    //4.2.1 const修饰的全局变量
    cout << "Global constant c_g_a's address is: " << &c_g_a << endl;
    cout << "Global constant c_g_b's address is: " << &c_g_b << endl;
    //4.2.2 const修饰局部变量
    const int c_l_a = 10;
    const int c_l_b = 10;
    cout << "Local constant c_l_a's address is: " << &c_l_a << endl;
    cout << "Local constant c_l_b's address is: " << &c_l_b << endl;
    return 0;
}

6、运行结果:

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!   

相关文章

  • 浅谈c++性能测试工具之计算时间复杂度

    浅谈c++性能测试工具之计算时间复杂度

    有时候除了测量算法的具体性能指数,我们也会希望测试出算法的时间复杂度,以便我们对待测试的算法的性能有一个更加直观的了解。本文将介绍c++性能测试工具之计算时间复杂度。
    2021-06-06
  • C++11中的可变参数模板/lambda表达式

    C++11中的可变参数模板/lambda表达式

    C++11的新特性可变参数模板能够让我们创建可以接受可变参数的函数模板和类模板,相比C++98和C++03,类模板和函数模板中只能含固定数量的模板参数,可变参数模板无疑是一个巨大的改进,这篇文章主要介绍了C++11中的可变参数模板/lambda表达式,需要的朋友可以参考下
    2023-03-03
  • 深入浅析 C++ 调用 Python 模块

    深入浅析 C++ 调用 Python 模块

    Python 提供了 C++ 库,使得开发者能很方便地从 C++ 程序中调用 Python 模块。接下来通过本文给大家介绍 C++ 调用 Python 模块的相关知识,需要的朋友参考下吧
    2016-03-03
  • 深入了解C语言中的字符串和内存函数

    深入了解C语言中的字符串和内存函数

    本文主要带大家来学习一些常用的库函数。有了这些库函数,我们可以更加方便地操作字符串和内存,从而提升我们的编码效率。话不多说,我们开始吧
    2022-11-11
  • 详解Qt使用QImage类实现图像基本操作

    详解Qt使用QImage类实现图像基本操作

    这篇文章主要介绍了Qt如何利用QImage类实现对图像的基本操作,包括图像显示、图像缩放、图像旋转等,感兴趣的小伙伴可以跟随小编一起动手尝试一下
    2022-06-06
  • C语言返回值指针的函数详解

    C语言返回值指针的函数详解

    这篇文章主要为大家详细介绍了C语言返回值指针的函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C++缺省参数的具体使用

    C++缺省参数的具体使用

    缺省参数是声明或定义函数时为函数的参数指定一个默认值。本文就详细的介绍了一下C++缺省参数的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2022-01-01
  • opencv3/C++绘制几何图形实例

    opencv3/C++绘制几何图形实例

    今天小编就为大家分享一篇opencv3/C++绘制几何图形实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • exec()函数在C++中的应用及其用法

    exec()函数在C++中的应用及其用法

    exec()函数在C++中是一个进程控制函数,用于创建新进程执行其他程序或命令行指令。exec()函数可以替换当前进程的代码和数据,创建新的进程运行其他程序。exec()函数有多个版本,例如execl、execv、execle、execve等,根据不同的参数类型和个数来使用
    2023-05-05
  • 详解C++编程中的sizeof运算符与typeid运算符

    详解C++编程中的sizeof运算符与typeid运算符

    这篇文章主要介绍了C++编程中的sizeof运算符与typeid运算符,是C++入门学习中的基础知识,需要的朋友可以参考下
    2016-01-01

最新评论