编程中需要深刻理解的最基础的东西就是:
1、变量的作用域和生命周期;
2、函数的作用域和生命周期;
C++程序执行时,内存块的划分。
1、栈区:编译器自动分配内存,回收内存。存放函数参数值,局部变量值。操作方式类似于数据结构中的栈。它不是数据结构中的栈,是因为数据结构中的栈是一个数据类型,它存储一些数据之后,然后就放入到了内存块的栈区,或者堆区等。
2、堆区:通常由程序员分配内存,程序员释放内存。它分配内存的方式类似于链表,和数据结构中堆不同(数据结构中的堆是完全二叉树,满足一定规则,分为大顶堆和小顶堆)。为什么是通常,(因为java中的堆的内存释放是又垃圾回收器完成的)。暂时说这么多,因为这里是为了澄清一些内容的概念。
3、全局区(静态区):编译器编译时分配内存,程序中的全局变量和静态变量就存储在这里面。(二者未初始化时放在相邻的区域,初始化后放在同一块区域)。它的内存由系统释放。而且存在于程序运行期间的始终。
4、文字常量区:存储常量字符串。有人说const修饰的常量存储在哪个区,是不是在常量区,const只是起修饰作用,在函数体外的就是存储在全局区,在函数体内的就是存储在栈区,const static修饰的,在函数体内,也是存储在全局区。(我自己认为)。释放由系统。
5、代码区:不解释,没必要解释。
全局