每个程序运行起来以后,它将拥有自己独立的虚拟地址空间。这个虚拟地址空间的大小与操作系统的位数有关系。例如32位硬件平台的虚拟地址空间的地址可以从0~2^32-1,即0x00000000~0xFFFFFFFF,总共4GB大小。在32位Window...
每个程序运行起来以后,它将拥有自己独立的虚拟地址空间。这个虚拟地址空间的大小与操作系统的位数有关系。例如32位硬件平台的虚拟地址空间的地址可以从0~2^32-1,即0x00000000~0xFFFFFFFF,总共4GB大小。在32位Windows操作系统中,高地址的2GB位内核空间,用户空间只有2GB,而32位Linux的内核空间只有1GB,用户空间有3GB大小。而64位操作系统,用户可用空间则要大的多。C/C++程序在虚拟内存中的排布大概如下所示(仅仅列出了相关的主要段):
相关解释:
栈区(stack): 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
堆区(heap) : 一般由程序员分配释放, 若程序员不释放,在程序结束时,操作系统回收。
BSS段(Block Started by Symbol):.bss段被用来存放那些没有初始化或者初始化为0的全局变量。bss段只占运行时的内存空间而不占文件空间。在程序运行的整个周期内,.bss段的数据一直存在
全局区(静态区):全局变量和静态变量的存储是放在一块的, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 在程序序结束后由系统释放。
DATA区(初始化的数据段):为数据分配空间,数据保存在目标文件中
文字(只读)常量区 :常量字符串就是放在这里的。 程序结束后由系统释放
代码段(TXT):存放函数体的二进制代码
本文章参考相关文章连接:
https://blog.csdn.net/a34140974/article/details/82426859
https://blog.csdn.net/jirryzhang/article/details/79518408
本文标题为:C/C++内存分布


- Qt计时器使用方法详解 2023-05-30
- C++ 数据结构超详细讲解顺序表 2023-03-25
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- ubuntu下C/C++获取剩余内存 2023-09-18
- Easyx实现扫雷游戏 2023-02-06
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- C语言详解float类型在内存中的存储方式 2023-03-27
- C语言qsort()函数的使用方法详解 2023-04-26