当前位置:首页 » 存储配置 » c变量存储

c变量存储

发布时间: 2022-05-30 13:37:13

c语言变量如何存储在内存中

在系统为一个程序分配的空间中,分成许多段,比如有代码段,存放程序可执行代码,有数据段,可以分配变量,有常量段,专门存放常量,是只读的。常量变量可以位于数据段中,仍然是变量,只是程序没有改动权限。在程序执行到main之前,系统负责将常量区存储的常量赋值给常量。

❷ C语言是怎么经过转换将变量的值存储在内存中的

C语言编译器负责将源代码中的十进制的10翻译成4字节数据:0A(16进制)(实际存储为二进制,但描述起来太长不方便一般用16进制显示和描述),而一个字节的10实际上的二进制就是你说的00001010。

实际上在处理存储之前需要先分配一个内存给变量 i,并在编译环境中注册登记这个变量名-地址关系(变量表),方便后续代码访问此变量时匹配到该地址,比如遇到 i=i+2时,编译器就会生成一个指令对该地址的值进行+2操作。此外还需要生成一个MOV指令代码指挥CPU执行:数据保存到该地址。

如果你对编译后的细节感兴趣,可以在调试时按CTRL+ALT+D(VS的快捷键,也可以通过菜单导航到“调试-窗口-反汇编”,其他编译器在调试菜单中找)切换到反汇编窗口查看编译结果,系统会逐条显示每一条语句对应的汇编指令。

当你对汇编指令感到好奇之后,可以看看汇编、编译原理、8086 CPU原理、以及数字电路的译码器 等书籍,不需要完全看懂,了解下会对你学习任何编程语言有帮助,不仅仅局限于C语言。

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

C语言中局部变量存在栈里,全局变量存静态存储区。

局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配,但是记得使用完这个堆空间后要释放之。

全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放;

(3)c变量存储扩展阅读

C语言中局部变量和全局变量示例:

#include<stdio.h>

#include<malloc.h>

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

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

voidmain()

{

staticints4=0,s5=0,s6=0;<spanstyle="font-family:Arial,Helvetica,simsun,u5b8bu4f53;"></span>//静态变量

inta1=0,a2=0,a3=0;<spanstyle="font-family:Arial,Helvetica,simsun,u5b8bu4f53;"></span>//局部变量放在栈区

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

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

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

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

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

printf("动态数据区 ");

printf("a1 a2 a3 ",&a1,&a2,&a3);

printf("c1 ",c1);

printf("m1 m2 m3 ",&m1,&m2,&m3);

printf("静态数据区 ");

printf("s1 s2 s3 ",&s1,&s2,&s3);

printf("g1 g2 g3 ",&g1,&g2,&g3);

printf("s4 s5 s6 ",&s4,&s5,&s6);

printf("c2 ",c2);

}

❹ c语言变量存储

在函数体中定义的变量通常是在栈上,用malloc,
calloc,
realloc等分配内存的函数分配得到的就是在堆上。
在函数外部定义的变量(全局变量或静态外部变量)和在函数内部定义的static变量,其生存期就是程序运行的全过程,这些变量被存储在数据段(datasegment)中。
在函数内部定义的auto变量(没有用关键字static定义的变量)的生存期从程序开始执行其所在的程序块代码时开始,到程序离开该程序块时为止。作为函数参数的变量只在调用该函数期间存在。这些变量被存储在栈(stack)中。

❺ C语言中变量的存储类型有哪几种,存储方式哪几种谢喽

在C语言中,对变量的存储类型说明有以下四种:

1、auto 自动变量

2、register 寄存器变量

3、extern 外部变量

4、static 静态变量

所谓存储类型是指变量占用内存空间的方式,也称为存储方式。

变量的存储方式可分为“静态存储”和“动态存储”两种。

1、静态存储变量通常是在变量定义时就在存储单元并一直保持不变,直至整个程序结束。

2、动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放。典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配,调用函数完毕立即释放。

如果一个函数被多次调用,则反复地分配、释放形参变量的存储单元。从以上分析可知,静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。

(5)c变量存储扩展阅读:

变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。

一、从作用域看:

1、全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量的定义的源文件需要用extern关键字再次声明这个全局变量。

2、静态局部变量具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束一直存在,它和全局变量的区别在于全局变量对所有函数都是可见的,而静态局部变量只对定义自己的函数体始终可见。

3、局部变量也只有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。

4、静态全局变量也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它文件里,不能作用到其他文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。

二、从分配空间看:

全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。

全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。

而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一个源程序的其他源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其他源文件中引起错误。

1、静态变量会放在程序的静态数据存储区(全局可见)中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。

2、变量用static告知编译器,自己仅仅在变量的作用范围内可见。这一点是它与全局变量的区别。

参考资料来源:网络-变量-存储类型

❻ C语言中全局变量的储存类别是

C语言中全局变量的储存类别是静态存储区。

由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。

全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。



(6)c变量存储扩展阅读:

使用全局变量会占用更多的内存(因为其生命期长),不过在计算机配置很高的今天,这个不应该算什么问题,除非使用的是巨大对象的全局变量,能避免就一定要避免。

使用全局变量程序运行时速度更快一些(因为内存不需要再分配),同样也快不了多少。对于局部变量的名字空间污染,这个在不使用太多变量时是可以避免的。

当全局变量与局部变量重名的时候,起作用的是局部变量,全局变量被屏蔽掉。还可以用extern在函数外对全局变量声明,使全局变量的作用域从声明处到文件的结束。

❼ C语言中全局变量存放在内存空间中那个位置

在 C 语言中,内存分配方式有以下三种形式:

1、从静态存储区域分配
由编译器自动分配和释放,在程序编译的时候就已经分配好内存,这块内存在程序的整个运行期间都存在,直到整个程序运行结束时才被释放,如全局变量与 static 变量。

2、在栈上分配
同样由编译器自动分配和释放,在函数执行时,函数内部的局部变量都可以在栈上创建,函数执行结束时,这些存储单元将则被自动释放。

需要注意的是,栈内存分配运算内置于处理器的指令集中,它的运行效率一般很高,但是分配的内存容量有限。

3、从堆上分配
也称为动态内存分配,由程序员手动完成申请和释放。程序在运行的时,由程序员使用内存分配函数(如 malloc 函数)来申请内存,使用完之后再由程序员自己负责使用内存释放函数(如 free 函数)来释放内存。

需要注意的是,如果在堆上分配了内存空间,就必须及时释放它,否则将会导致运行的程序出现内存泄漏等错误。

在 C 语言中,不同类型变量的存储位置和作用域也有所不同。

全局变量
从静态存储区域分配,其作用域是全局作用域,也就是整个程序的生命周期内都可以使用。如果程序是由多个源文件构成的,那么全局变量只要在一个文件中定义,就可以在其他所有的文件中使用,但必须在其他文件中通过使用extern关键字来声明该全局变量。

全局静态变量
从静态存储区域分配,其生命周期也是与整个程序同在的,从程序开始到结束一直起作用。与全局变量不同的是,全局静态变量作用域只在定义它的一个源文件内,其他源文件不能使用。

局部变量
从栈上分配,其作用域只是在局部函数内,在定义该变量的函数内,只要出了该函数,该局部变量就不再起作用,也即该变量的生命周期和该函数同在。

局部静态变量
从静态存储区域分配,其在第一次初始化后就一直存在直到程序结束。该变量的特点是其作用域只在定义它的函数内可见,出了该函数就不可见了。

❽ C语言中的 局部变量,存储在什么地方

C语言中的局部变量存储在栈里。

普通的局部变量在栈空间上分配,这个局部变量所在的函数被多次调用时,每次调用这个局部变量在栈上的位置都不一定相同。局部变量也可以在堆上动态分配(malloc),但是记得使用完这个堆空间后要释放之。

在栈空间上分配时是要注意内存的,不能分配内存过大。如果栈内空间小于所申请的空间大小,那么这时系统将揭示栈溢出,并给出相应的异常信息。但是堆不一样,堆可分配空间是很大的。

(8)c变量存储扩展阅读

局部变量分类

1、位置:静态局部变量被编译器放在全局存储区.data,所以它虽然是局部的,但是在程序的整个生命周期中存在(定义时出生,随着程序结束而结束)。

2、访问权限:静态局部变量只能被其作用域内的变量或函数访问。也就是说虽然它会在程序的整个生命周期中存在,由于它是static的,它不能被其他的函数和源文件访问。

3、值:静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,以后每次调用静态局部变量的时候都用上次调用后的值。

❾ c语言常量变量在内存中的存储方式

从静态存储区域分配:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。

在栈上创建(地址从大到小):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(栈上的变量都具有临时变量的特性)

从堆上分配(地址从小到大):亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自行负责在何时用free或delete释放内存。

(9)c变量存储扩展阅读:

注意事项:

const在C语言中使用比较多,虽然变量由const修饰,但是从本质上仍然是变量,所以存储在堆栈和静态存储区,这么区域从进程角度来讲是可读可写,但为什么const修饰后将变得不可写了。

既然const变量所在区域的属性为可读可写,那么可以修改其所处内存的值了。

C语言const变量的作用说起:const是一个c语言的关键字,限定一个变量不允许被改变,产生静态作用。使用const在一定程度上可以提高程序的安全性和可靠性。另外在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。

❿ c语言中变量是怎样存储的

这个依照你的变量或者对象的申明位置和方式不同而不同的。
一般来说,全局变量,静态变量,首先分配,分配在静态存储空间。
局部变量,在申明的是后分配,分配在栈上。作用域结束后系统会自动回收。
动态申请的空间,在执行分配函数时分配,分配在堆上,又程序员自己写释放代码手动释放空间。

热点内容
安卓哪里可以听空间音频 发布:2024-11-14 13:39:39 浏览:481
什么软件查看手机配置 发布:2024-11-14 13:35:25 浏览:726
androidsql查询语句 发布:2024-11-14 13:35:09 浏览:893
linux查看线程数 发布:2024-11-14 13:34:21 浏览:771
如何在实验室搭建服务器 发布:2024-11-14 13:33:36 浏览:632
c语言多个条件 发布:2024-11-14 13:32:36 浏览:71
缓存行原理 发布:2024-11-14 13:08:56 浏览:432
简单的vb编程 发布:2024-11-14 13:06:45 浏览:523
绿色linux 发布:2024-11-14 12:56:11 浏览:350
游戏本缓存 发布:2024-11-14 12:55:28 浏览:650