内存区

内存区

堆区

堆区是动态分配的内存区域,用于存储程序运行时需要的数据。堆区的分配和释放不是由编译器控制的,而是由程序员手动调用相应的函数进行控制,比如C++中的newdelete操作符。堆区中存储的数据可以被任何函数访问,只要拥有对应的指针或引用。堆区的内存分配和释放是比较灵活的,可以根据程序的需要进行动态调整,但同时也需要注意避免内存泄漏和悬空指针等问题。

栈区

栈区是程序运行时的一种内存分配区域,通常被用于存储函数调用时的临时变量、函数参数(形参)、函数返回地址、局部变量等信息。栈区的特点是后进先出(LIFO),也就是说最后进栈的变量会最先被弹出栈。

栈区是在程序运行时由操作系统动态分配的,它通常位于程序的高地址区域,与堆区相对应。栈区的大小是由操作系统预先设置好的,一般较小,通常在几MB到几十MB之间,具体大小取决于操作系统和编译器的实现。

栈区的分配和释放是由编译器自动完成的,当函数被调用时,编译器会在栈区为函数分配一段连续的内存空间,当函数执行完毕时,这段内存空间会自动释放。在函数调用的过程中,如果需要传递参数或者调用其他函数,这些信息都会被存储在栈区中。

需要注意的是,由于栈区的空间是有限的,如果程序中使用过多的栈空间,就会发生栈溢出(stack overflow)的错误。栈溢出通常是由于递归调用过深或者分配了过多的本地变量等原因导致的,它会导致程序崩溃或出现未定义的行为,因此在编写程序时需要注意栈空间的使用和限制。

全局区

全局/静态存储区:存放全局变量静态变量(包括静态全局变量与静态局部变量),初始化的全局变量和静态局部变量放在一块,未初始化的放在另一块。全局变量静态变量在程序的整个生命周期内都存在于全局区中,直到程序结束。全局区中的变量可以被整个程序中的任意函数访问,其生命周期与程序的生命周期一致。

代码区

代码区用于存放函数体的二进制代码,由操作系统进行管理

代码区是程序运行时的内存分配区域,也被称为只读区或者文本区。代码区是存储程序代码的内存区域,它通常是只读的,且不允许进行写操作。代码区中的数据是在程序编译时就已经确定的,其内容在程序运行期间不会发生变化。

代码区存储着程序的指令集,包括函数的二进制代码、常量和字面量等,这些指令会在程序运行时被CPU逐条执行。由于代码区是只读的,因此代码区中的数据不会被修改或者污染,可以保证程序的正确性和安全性。

在内存中,代码区通常位于程序的低地址区域,与数据区和堆区相对应。由于代码区是只读的,所以操作系统通常会将代码区与数据区和堆区分开,以提高系统的安全性和稳定性。

需要注意的是,代码区的大小是由程序的代码量和编译器的实现决定的,其大小在程序编译时就已经确定,不会在程序运行时发生变化。在编写程序时,需要注意代码区的使用和限制,避免出现程序崩溃或者内存溢出等问题。

image-20230604181824472

posted @ 2023-06-04 21:44  晚枫zz  阅读(4)  评论(0)    收藏  举报