当前位置:首页 > 内存 > 正文

变量在内存中的存储位置

  • 内存
  • 2024-05-22 08:31:17
  • 5286

一、C语言中局部变量和全局变量都是存储在什么区

在C中,局部变量存储在堆栈中,全局变量存储在静态存储区域中。

局部变量分配在堆栈空间中。当多次调用包含局部变量的函数时,每次调用时局部变量在堆栈中的位置不一定相同。局部变量也可以在堆上动态分配,但一定要在使用后回收堆上的空间。

所有全局变量都存储在静态存储区域中。该存储区域在程序开始执行时分配给全局变量,并在程序结束时释放。在程序执行期间,它们占用固定的内存单位,并且不会动态分配或释放;

扩展信息

局部变量和全局变量的示例:

#include

#include

staticints1=0,s2=0,s3=0;//静态变量放在静态区

intg1=0,g2=0,g3=0;//全局变量放在静态区

voidmain()

{

staticints4=0,s5=0,s6=0;//静态变量

inta1=0,a2=0,a3=0;//局部变量放在栈区

charc1[]="aabb";//局部变量分配在栈区

char*c2="aabb";//字符常量分配在静态区

char*m1=(char*)malloc(1);//堆区

char*m2=(char*)malloc(1);//堆区

char*m2=(char*)malloc(1);//堆区

char*m2=(char*)malloc(1);//堆区

char*m3=(char*)malloc(1);//堆区

printf("动态数据区\n");

printf("a1\na2\na3\n",&a1,&a2,&a3);

printf("c1\n",c1);

printf("m1\nm2\nm3\n",&m1,&m2,&m3);

printf("静态数据区\n");

printf("s1\ns2\ns3\n",&s1,&s2,&s3);

printf("g1\ng2\ng3\n",&g1,&g2,&g3);

printf("s4\ns5\ns6\n"、&s4、&s5、&s6);

printf("c2\n",c2);


二、C语言的各种数据在内存中如何存储?变量可以根据其生命周期存储在内存中的不同位置。函数外部定义的变量(全局变量或静态外部变量)和函数内部定义的静态变量的生命周期是程序执行的整个过程;这些变量都存储在数据段中。数据段是内存中为这些变量保留的固定大小的区域,分为两部分,一部分用于存储已初始化的变量,另一部分用于存储已初始化的变量,用于存储未定义的变量。函数内定义的auto变量(未使用static关键字定义的变量)的生命周期从程序开始执行该变量所在块中的代码时开始,一直持续到程序离开该块时结束。。作为函数参数的变量仅在函数调用期间存在。这些变量存储在堆栈中。堆栈是内存中的一个空间,一开始很小,然后自动逐渐增长,直到达到预定义的限制。
三、局部变量全局变量动态变量分别存储什么位置在C语言中,局部变量和全局变量存储在堆栈中,而所有使用malloc和new等运算符动态分配的空间都存储在堆(转储)中,
简单的例子:
int*ptr;
ptr=(int*)malloc(100*sizeof(int));
这两条语句中,指针变量ptr存储在栈上,但它指向的内容却在堆上。你明白吗