对内存中存储区域的再认识
2016-05-19 22:15
260 查看
在开始学习编程的时候,我们不会再定义变量时考虑过多,但是随着学习的深入,知道我们遇到了const static 指针....。这些常常涉及到内存区域的时候,我们显得十分无知。
程序中的动态存储区/静态存储区/堆栈究竟是什么东西?
所谓静态,就是一定会存在的而且会永恒存在、不会消失,这样的数据包括常量、常变量(const 变量)、静态变量、全局变量等。
动态的话,就是会变化的了。动态的区域,就是堆和栈。这个栈应该称作 call stack,上面会存放函数的返回地址、参数和局部变量。而堆放就是我们通过 new 算符和 malloc 函数分配得到的空间。
Static code and data - this is all the compiled code plus all static
data。
Dynamic
data - this is memory that is allocated during program execution。
这两句话的大概意思就是:静态变量编译的时候才分配内存;动态分配内存是在程序执行的时候分配内存。
l存储空间的组成部分¡正文段 由CPU执行的机器指令构成,共享+只读。 ¡初始化数据段 数据段,由程序中已赋初值的静态变量构成。 ¡非初始化数据段 bss段,在程序开始执行之前,内核将此段初始化 为0。 ¡栈 自动变量、参数、函数调用的场景信息(如返回 地址、寄存器值)。 ¡堆 进行动态存储分配,位于非初始化数据段顶和栈 底之间。
程序中的动态存储区/静态存储区/堆栈究竟是什么东西?
所谓静态,就是一定会存在的而且会永恒存在、不会消失,这样的数据包括常量、常变量(const 变量)、静态变量、全局变量等。
动态的话,就是会变化的了。动态的区域,就是堆和栈。这个栈应该称作 call stack,上面会存放函数的返回地址、参数和局部变量。而堆放就是我们通过 new 算符和 malloc 函数分配得到的空间。
Static code and data - this is all the compiled code plus all static
data。
Dynamic
data - this is memory that is allocated during program execution。
这两句话的大概意思就是:静态变量编译的时候才分配内存;动态分配内存是在程序执行的时候分配内存。
程序员通过语句,给数组或结构等变量分配内存。通常在运行开始时,程序员并不知道数组将要有多少元素,而是运行时由用户输入的。动态分配(malloc)的内存,当不需要用时可以取消。当需要再次增加单元时可以增加(realloc)。
l存储空间的组成部分¡正文段 由CPU执行的机器指令构成,共享+只读。 ¡初始化数据段 数据段,由程序中已赋初值的静态变量构成。 ¡非初始化数据段 bss段,在程序开始执行之前,内核将此段初始化 为0。 ¡栈 自动变量、参数、函数调用的场景信息(如返回 地址、寄存器值)。 ¡堆 进行动态存储分配,位于非初始化数据段顶和栈 底之间。
相关文章推荐
- 学习日记2
- Java笔记---c.toArray might (incorrectly) not return Object[] (see 6260652)官方Bug
- 啦啦啦啦~Django1.96---编写第一个Django应用(3)
- 免费的论文查重网站
- css3加js做一个简单的3D行星运转效果
- IL-rewriting profiler
- 1023 Problem W
- 12.13周记
- Maven仓库详解
- 4——PHP比较&&复制运算符
- MongoDB升级到3.0以上的Zabbix监控模板变更
- 离散数学 求偏序集极大极小元第三种思路 假链式前向星
- HDU2124 Repair the Wall(贪心)
- UEFI引导系统
- 多方向拖拽改变元素大小
- U3D学习笔记1
- poj2186 Popular Cows(Tarjan+缩点水)
- Mac上安装MySQL图文教程(解决了临时密码和编码集问题)
- 课堂练习四
- 1,理解java中的IO