c++的四大区
今天开始学习使用c++,之前一直使用python比较多。语言各有千秋,只有最合适。好啦,现在到了使用c++的时候惹。希望我能够喜欢上这个语言。
let’s go!😽
内存四大区
编程语言的内存管理,都是类似的,以c++为例,分为以下四大区
- 代码区
- 全局区
- 栈区
- 堆区
每个区域都有不同的生命周期,咳咳咳,想要更好的编程,当然要好好学习内存管理。
这块内容像学习心法一样,之修外,而不修内功,会走火入魔,同时不能更好、更快的学习新的东西,对编程语言也了解不够深入。
代码区
代码区,顾名思义,这是存放代码的地方,但是cpu只认识指令。
编译器在编译代码后,会把代码翻译成二进制指令集合,代码区就是存放这些指令集合的。
所以代码区是不能更改的,代码区公用一份内存空间,为了节省空间啦。比如,代码中很多地方都有用到一个函数,但是这个函数在代码区只有一份。c++很抠门的。
代码区,在程序运行的时候,会优先加载到内存中哟。
全局区
c++的全局区,不同于一些编程语言,全局区包含常量,静态变量,全局变量等等。十分强大。
全局区的这些东西,同样在编译阶段都会加载完成。
程序运行时,与代码区一同先加载到内存之中。
- 常量,包含字符串常量,数字常量等等
- 静态变量,在编译时就会运行加载,并且只运行一次,存在全局区。
- 全局变量,有程序员自己定义的变量,作用在全局区,所有的东西都能访问到它。
栈区
栈区,是编译器的管理的内存,所有的临时变量都会储存在这里,交给编译器管理,十分方便,缺点栈的深度有限,有时候,我们需要使用大量递归,会栈溢出。
堆区
堆区又程序员手动管理,例如c语言的malloc或者是c++的new,都是在堆区申请的内存,需要手动管理。
- 优点,操作更加灵活方便。给予程序员很高的权限。
- 缺点,增加了程序员的心智负担,内存往往没有得到很好的控制。