本文主要讲述程序所占用系统内存的分段,以及栈与堆的区别(数据结构,内存),然后分别就全局和静态的所构造的变量做一介绍,本文参考了几篇文章并列出:
原文1:http://www.cnblogs.com/lln7777/archive/2012/03/14/2396164.html
原文2:http://blog.csdn.net/zhaozhanyong/article/details/6180068
原文3:http://blog.sina.com.cn/s/blog_63278e550100lcb9.html
1、在C\C++中,程序所占内存主要分为:符号起始的区块段、数据段、代码段、堆、栈!!
(1)符号起始的区块(Block Started by Symbol,BSS)段:BSS段通常指用来存放程序中未初始化的全局数据和静态数据的一块内存区域。BSS段属于静态内存分配,程序结束后静态变量资源由系统自动释放。
(2)数据段:数据段通常指用来存放程序中已初始化的全局边的一块内存区域。数据段也属于静态内存分配。
(3)代码段:也叫文本段,通常指用来存放程序执行代码(包括类成员函数和全局函数以及其它函数代码)的一块内存区域,这部分区域的大小在程序运行前就已经确定,并且内存区域通常是只读,某些架构也允许代码段为可写,即允许修改程序。在代码段可能也包含一些只读的常数变量。
(4)堆:堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc或new僧函数分配内存时,新分配的内存就被动态添加到堆上,当利用free或delete等函数释放内存时,被释放的内存从堆中被删除。对一般由程序员分配释放,程序结束时可由操作系统回收。
(5)栈:栈:栈是用户存放程序临时创建的局部变量(但不包括stastic声明的变量,static意味着在数据段中存放变量)。此外,函数被调用时,其参数也会被压入发起调用的进程栈中,并且等调用结束后,函数的返回值也会被存放回栈中。栈由编译器自动分配释放,操作方式类似于数据结构中的栈。
下面就栈和堆分别就在内存中和数据结构中,做一分别介绍:
数据结构的栈和堆
首先在数据结构上要知道堆栈,尽管我们这么称呼它,但实际上堆栈是两种数据结构:堆和栈。
堆和栈都是一种数据项按序排列的数据结构。
栈就像装数据的桶或箱子
我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。
这就如同我们要取出放在箱子里面底下的东西(放入的比较早的物体)&