您的位置:首页 > 其它

对内存中存储区域的再认识

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。

这两句话的大概意思就是:静态变量编译的时候才分配内存;动态分配内存是在程序执行的时候分配内存。
程序员通过语句,给数组或结构等变量分配内存。通常在运行开始时,程序员并不知道数组将要有多少元素,而是运行时由用户输入的。动态分配(malloc)的内存,当不需要用时可以取消。当需要再次增加单元时可以增加(realloc)。

l存储空间的组成部分¡正文段  由CPU执行的机器指令构成,共享+只读。 ¡初始化数据段  数据段,由程序中已赋初值的静态变量构成。 ¡非初始化数据段  bss段,在程序开始执行之前,内核将此段初始化  为0。 ¡栈  自动变量、参数、函数调用的场景信息(如返回  地址、寄存器值)。 ¡堆  进行动态存储分配,位于非初始化数据段顶和栈  底之间。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: