c++的四大区

今天开始学习使用c++,之前一直使用python比较多。语言各有千秋,只有最合适。好啦,现在到了使用c++的时候惹。希望我能够喜欢上这个语言。

let’s go!😽

内存四大区

编程语言的内存管理,都是类似的,以c++为例,分为以下四大区

  • 代码区
  • 全局区
  • 栈区
  • 堆区

每个区域都有不同的生命周期,咳咳咳,想要更好的编程,当然要好好学习内存管理。

这块内容像学习心法一样,之修外,而不修内功,会走火入魔,同时不能更好、更快的学习新的东西,对编程语言也了解不够深入。

代码区

代码区,顾名思义,这是存放代码的地方,但是cpu只认识指令。

编译器在编译代码后,会把代码翻译成二进制指令集合,代码区就是存放这些指令集合的。

所以代码区是不能更改的,代码区公用一份内存空间,为了节省空间啦。比如,代码中很多地方都有用到一个函数,但是这个函数在代码区只有一份。c++很抠门的。

代码区,在程序运行的时候,会优先加载到内存中哟。

全局区

c++的全局区,不同于一些编程语言,全局区包含常量,静态变量,全局变量等等。十分强大。

全局区的这些东西,同样在编译阶段都会加载完成。

程序运行时,与代码区一同先加载到内存之中。

  • 常量,包含字符串常量,数字常量等等
  • 静态变量,在编译时就会运行加载,并且只运行一次,存在全局区。
  • 全局变量,有程序员自己定义的变量,作用在全局区,所有的东西都能访问到它。

栈区

栈区,是编译器的管理的内存,所有的临时变量都会储存在这里,交给编译器管理,十分方便,缺点栈的深度有限,有时候,我们需要使用大量递归,会栈溢出。

堆区

堆区又程序员手动管理,例如c语言的malloc或者是c++的new,都是在堆区申请的内存,需要手动管理。

  • 优点,操作更加灵活方便。给予程序员很高的权限。
  • 缺点,增加了程序员的心智负担,内存往往没有得到很好的控制。