IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> c++征途 --- 程序的内存模型 -- 内存四区 -> 正文阅读

[C++知识库]c++征途 --- 程序的内存模型 -- 内存四区

?内存四区的意义:

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

第一区 --- 代码区

1.代码区中存放的是二进制代码!!!而不是我们写的高级语言

计算器会将我们写的高级语言转换为二进制数后再存入代码区

?

?1.存放CPU执行的机械指令 --- 这个机械指令其实就是存放在代码区的二进制代码


第二区 --- 全局区

?

1.全局变量是在所有函数外的变量?

?const修饰的全局变量可以看作是全局常量?

局部变量和局部常量(const修饰)都是存放在栈区

而全局变量,静态变量(static修饰)和常量(分为字符串常量和全局常量(const修饰))都是放在全局区的?


第三区 --- 栈区

?1.栈区中的的内存空间由编译器来分配和释放

2.局部变量和函数参数都是在函数中的,当函数结束的时候,编译器就会将它们在栈区中分得的内存空间给释放掉

3.由2我们可以推出当我们在调用一个函数后将这个函数中的某个局部变量的地址传出的话就会导致程序出错 --- 原因就是函数一结束,栈区中分给这个函数内的局部变量和参数的内存空间就会被释放,此时我们根据原空间地址是找不到这个内存空间的(因为这个内存空间已经被释放了)--- 找不到就会出现野指针,进而导致程序出错

?为了避免这种错误 --- 函数的返回值不能是其局部变量的地址

所以上面这种编程方法是错误的

1.值得注意的是编译器在你返回函数局部变量的地址并解引用的时候 ---?会为你保留一次这个指针指向的数据,但是也只会保留一次,如果你解引用第二次的话指针就会变成野指针,指向一个随机的内存空间?

总的来说还是不要返回函数局部变量的地址


第四区 --- 堆区

?1.堆区的数据由程序员来分配和释放

2.在c++中如果想在堆区中开辟内存空间的话就需要用到新的关键字 --- new

?用new开辟内存堆区空间相关内容:

1.开辟格式? --- new 要开辟的变量的类型(变量中存储的数据) --- 如 new int (10 ) ---这个就是在堆区中开辟了一个整型内存空间,并在这个整型内存空间中存储了 10 这个数据

2.用new关键字开辟了内存空间之后,会将在堆区开辟的内存空间的地址返回 --- 而这个地址的代表就是 new int(10) 这一个开辟整体 --- 返回的地址需要我们用对应类型的指针来接收 ---

int* p =? new int(10)

3.上面这个例子中函数的返回值是指针变量,其实这也是一个局部变量但是为什么没有违规操作呢?原因是这个指针变量存的地址是堆区中的一个内存空间的地址,这个内存空间并不会在函数结束的时候就被自动释放,而是要等程序员来手动释放的 --- 所以内存空间没释放,根据地址能够找到内存空间 --- 所以可以直接返回这个指针局部变量

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 18:34:21  更:2022-07-20 18:38:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 21:08:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码