C++ 内存分布情况
个人主页:Jason_from_China-CSDN博客
所属栏目:C++系统性学习_Jason_from_China的博客-CSDN博客
所属栏目:C++知识点的补充_Jason_from_China的博客-CSDN博客
概念概述(主要存放的内容)
一、栈又叫堆栈:
在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
栈区主要存放运行函数而分配的局部变量、函数参数、返回数据、返回地址等。二、堆区 (heap):
内存映射段是高效的 I/O 映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。(Linux 如果没学到这块,现在只需要了解一下)。
一般由程序员分配释放,若程序员不释放,程序结束时可能由 OS 回收。分配方式类似于链表。
主要存放的是:动态分配的对象,大型数据结构,需要长期存在的数据,实现动态数据结构三、数据段 (静态区):
堆用于程序运行时动态内存分配,堆是可以上增长的。
主要存放的是:(static) 存放全局变量、静态数据。程序结束后由系统释放。四、代码段:
代码段 -- 可执行的代码 / 只读常量。
主要存放的是:存放函数体(类成员函数和全局函数)的二进制代码五、对比观察图
指针在内存里面的存放
一、局部指针变量 (存放在栈区)
在函数内部定义的指针变量,如果只是指向局部变量或者作为临时用途,通常存放在栈区。例如在某个函数内部定义一个指针指向另一个局部变量:
二、全局指针变量 (存放在静态存储区)
如果定义的是全局指针变量,那么它存放在静态存储区。
三、动态分配的指针 (存放在堆区)
通过动态内存分配函数 (如 malloc、calloc、realloc 等) 分配的内存空间的指针存放在堆区。
题目精讲
题目
图解
精讲