最近学习c++看视频时,老师时常提到栈区堆区,搞不清楚,只能泪目,毕竟爱过。。。因此,接下来对此做些整理,方便回顾。(老师说:这个简化模型仅用于初学者示意,与实际模型并不完全一致)

1.stack(栈)

  编译器自动分配释放

2.Heap(堆)

  一般由程序员分配释放,程序运行时用malloc或new申请的内存,需程序员用free或delete释放。

  若程序员不释放,程序结束时可能由OS回收

3.Global/Static(全局区/静态区)

  全局变量和静态变量的存储是放在一块的

  可以简单认为:

    程序启动全局/静态变量就在此处

    程序结束释放

4.Constant(常量区)

  可以简单理解为所有常量都放在一起

  该区域内容不可修改

Simplified Memory Modle C/C++内存模型

堆向高地址方向生长   栈向地地址方向生长

 

Eg1.

int arr[3];    //全局区

int myFunc( int * pi)

{

  int a;    

  char *p;

  p = static_cast<char*> new char[8];

  char* str = "hello world";

}

//pi a p str --->栈区

//char[8](new出来的) --->堆区

//"hello world"--->常量区

相关文章:

  • 2022-01-22
  • 2021-06-03
  • 2021-10-16
  • 2021-06-15
  • 2021-10-25
猜你喜欢
  • 2022-12-23
  • 2021-10-10
  • 2022-02-23
  • 2021-10-25
  • 2021-07-01
  • 2022-12-23
相关资源
相似解决方案