C 程序的内存布局如下所示。级别很少。它们是 -
现在让我们看看这些部分的功能是什么。
Sr.No | 部分和说明 |
---|---|
1 |
堆栈 进程堆栈包含方法/函数参数、返回地址和局部变量等临时数据。它是分配给自动变量和函数参数的内存区域。它还在执行函数调用时存储返回地址。堆栈采用LIFO(后进先出)机制来存储局部或自动变量、函数参数以及存储下一个地址或返回地址。返回地址是指函数执行完成后要返回的地址。该段大小根据局部变量、函数参数和函数调用而变化。该段从较高地址向较低地址增长。 |
2 |
堆 这是在进程运行时动态分配的内存。这是分配给动态内存存储(例如 malloc() 和 calloc() 调用)的内存区域。该段大小也根据用户分配而变化。该段从较低地址增长到较高地址。 现在让我们检查几个示例程序的段(数据和 bss 段)大小如何变化。通过执行命令“size”即可获知段大小。 |
3 |
文本 这包括由程序计数器的值和处理器寄存器的内容表示的当前活动。它由 .text 部分表示。这定义了内存中存储指令代码的区域。这也是一个固定区域。 |
4 |
数据 本节包含全局变量和静态变量。它由.data 部分和.bss 表示。 .data 部分用于声明内存区域,其中为程序存储数据元素。声明数据元素后,此部分无法扩展,并且在整个程序中保持静态。 .bss 部分也是静态内存部分,其中包含稍后在程序中声明的数据的缓冲区。该缓冲区内存是零填充的。 |
数据段可以分为更多的两部分。
这是目标文件或程序虚拟地址空间的一部分,由未初始化的静态变量和全局变量组成。未初始化的数据段也称为BSS(Block Started by Symbol)段。
这是可读写的,因为变量的值可以在运行时更改。该段也有固定的大小。
以上是C程序的内存布局的详细内容。更多信息请关注PHP中文网其他相关文章!