20210527-C++面试

1.C++内存布局
  一个程序运行起来,操作系统会给每个进程分配一个 4G 的程序地址空间,当然这都是虚拟地址空间,因为如果一个进程分 4G 的内存,那么就算有再多的内存也不够分。
20210527-C++面试_第1张图片
一、首先进程地址空间的 1G 内核空间是给操作系统使用的,我们用户是没有操作权限的。
二、剩下的 3G 内存空间中,分为了栈区、内存映射段、堆区、数据段、bss段、代码段
1)栈区:这里的栈和数据结构的栈并不相同,数据结构的栈是一种后进先出的数据结构,而内存划分的栈是操作系统按照栈的特性,给用户划分出的内存区间。
   栈区一般存放:函数体的局部变量、函数调用期间的所有参数压栈、函数的返回值
注意栈区这段内存是由操作系统自己维护的,所以函数结束,在栈上的空间会由操作系统自己回收。

2)堆区:用户所操作的内存就是堆上的空间,用户可以使用 malloc / calloc / realloc / new 申请堆上的空间,但是用户申请堆上的空间必须自己手动释放,不然会造成内存泄漏。

3)内存映射段:里面存放 动态库 / 静态库,以及文件映射,匿名映射等等一切有依赖性的东西都在这段区域

4)一个程序本质上都是由 bss段、数据段、代码段

你可能感兴趣的:(c++)