C++的内存包含4个大区,它们分别是代码区、全局区、栈区和堆区。
以下将对它们的分区进行进一步的阐述。
- 代码区:对于一段代码,首先要经过编译之后生成可执行文件才能执行,在Windows下通常为以.exe结尾的文件,而C++将这样的可执行代码单独存放在内存的一个固定区域,也就是说代码区在程序执行前就已经存在。
- 全局区:全局区存放的内容包括静态变量、全局变量、全局常量以及字符串常量。请注意全局常量是指在函数体外使用const申明的常量。与代码区相同的是,全局区在代码执行之前就已经存在。
- 栈区:栈区包含的内容有局部变量和形参值,它由编译器进行管理。值得注意的是,栈区在函数执行完成后依然会保留一次,当再次访问后编译器将会把它释放。在函数执行完成后继续访问局部变量是非法的,这里只是为了阐明C++对栈区的管理才进行这样的操作说明。
- 堆区:堆区由程序员进行管理,如果程序员并未处理,那么它将在程序执行完毕后释放。使用关键词new可以向堆申请存储区。