您当前的位置:首页 > 互联网教程

C语言里,哪些变量是存放在堆里,哪些是存放在栈里(

发布时间:2025-05-15 17:07:17    发布人:远客网络

C语言里,哪些变量是存放在堆里,哪些是存放在栈里(

一、C语言里,哪些变量是存放在堆里,哪些是存放在栈里(

1、在c/c++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

2、栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。

3、堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

4、自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。

5、全局存储区(静态存储区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。

6、常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。

二、C语言局部变量一定存放在栈区么

1、在51单片机的情况下,局部变量还可以存放在寄存器当中的,声明如下:

2、register int count;//count局部变量就存放在寄存器当中了而不是存放在栈中

3、补充:寄存器变量只能是局部变量,而不能是全局变量和静态变量的。在什么时候会用到呢?举个例子:

4、在上面这个for循环中,变量i会执行10000次的自增运算,如果这个局部变量i放在内存的栈区当中,每执行一次循环语句,都要从内存中取i的值,程序执行效率就会很低,但是i的值存放在寄存器中的话,由于寄存器读取数据的速度与CPU的执行速度相差不大,那么程序的执行效率就会很高了。所以寄存器变量就是在程序运行过程中被反复使用到的局部变量才会被声明为寄存器变量。

三、C语言中的栈和堆是什么

1、计算机中的内存分为两部分:一部分是栈(stack,也称堆栈),另一部分是堆(heap)。

2、栈,可以看作是一摞卡片,最上面的卡片表示程序的当前作用域,这往往就是当前正在执行的函数。

3、堆,一段完全独立于当前函数或者栈帧的内存区。如果一个函数中声明了一些变量,而且希望当这个函数完成时其中声明的变量仍然存在,就可以将这些变量置于堆中。