程序是由一连串的指令组成的,而这些指令的代码需要在运行时才能够被计算机执行。那么程序的代码储存在哪些区域呢?下面从几个方面进行详细阐述。
代码区(或者叫做文本区)是程序中储存指令代码的区域。它是一块只读的内存区域,也就是说,程序在编译后代码就已经确定,不允许对其进行修改。系统会提前把从程序中分离出来的代码储存在代码区,以便于在程序执行时能够快速地访问。代码区储存的指令以二进制形式进行存储,并且是按照程序的执行顺序一次性加载到内存中的。
堆区是程序在运行时动态分配内存的区域。在程序中,经常会有一些变量的大小无法确定,或者是需要动态分配内存的情况。这时程序就需要在运行时根据需要动态地申请和释放内存,这些内存就储存在堆区中。通常在堆区储存的是一些对象、数组等数据结构,由程序员手动申请和释放内存空间。
栈区中保存着程序执行的上下文信息,例如函数调用时的参数、返回地址以及局部变量等。当一个函数被调用时,便会在栈区中开辟一段新的内存空间,用来保存函数的上下文信息。随着函数执行的结束,对应的栈空间也会被释放。栈区是一种后进先出(LIFO)的数据结构,因为栈中储存的数据是以“栈帧”的形式存在的,而当程序执行到函数的末尾时,最后进入栈的“栈帧”就会最先被释放。
全局区(也叫做静态区)用于存放静态变量和全局变量的内存空间。这些变量在程序启动时便已经被储存在全局区中,程序结束时才被销毁。它们的生命周期与进程的生命周期相同。在 C/C++ 语言中,静态变量通常使用关键字 static 声明,而全局变量则是在函数外部声明。全局区的内存空间由系统开辟和释放。
通过以上的几个方面对程序的代码储存在什么区进行了详细的阐述。这些不同的区域在程序的运行时起到了不同的作用,它们协同工作,为程序的运行提供了坚实的基础。