14-程序的内存模型-内存四区




14-程序的内存模型-内存四区

程序的内存模型-内存四区

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

  • 代码区:存放函数体的二进制代码,由操作系统进行管理的

  • 全局区:存放全局变量和静态变量及常量

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

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

内存四区意义:

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

程序运行前

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

代码区:
  • 存放 CPU 执行的机器指令

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

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

全局区:
  • 全局变量和静态变量存放于此

  • 全局区还包含了常量区,字符串常量和其他常量页存放于此

  • 该区域的数据在程序徐结束后由操作系统释放

运行

总结
  • C++中在程序运行前分为 全局区代码区

  • 代码区特点是共享和只读

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

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

程序运行星后

栈区
  • 由编辑器自动分配释放,存放函数的参数值、局部变量等

  • 注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

运行

堆区
  • 由程序员分配释放,若程序员不释放,程序结束时由操作系统回收

  • 在 C++ 中主要利用 new 在堆区开辟内存

运行

new 操作符

C++中利用 new操作符 在堆区开辟数据

堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete

语法:

利用 new 创建的数据,会返回该数据对应的类型的指针

运行

delete 释放堆区数据

运行

内存已经被释放,再次访问就是非法操作,会报错

在堆区利用 new 开辟数组

运行

delete 释放堆区数组

运行


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇