当前位置:首页 » 编程语言 » c语言静态变量存放在数据段
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言静态变量存放在数据段

发布时间: 2022-05-18 09:08:37

1. c语言中static定义的变量 存储在OS内存的什么区域

windows下,进程虚拟地址4G,0~2G属于进程私有,
进程私有地址布局是:
两端各有64k空间,以防指针值为空,
地址从低往高是代码段、数据段、栈、堆,

static变量在数据段,具体是_DATA段,该段数据都已初始化

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

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

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

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

(2)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);

}

3. c语言里什么变量存储在堆中什么变量存储在栈中啊!

函数的局部变量、参数一般在栈中分配空间存储
也不是绝对的,编译器可能会优化使用寄存器传递参数
不过可以显式地规定函数的参数传递方式,可以查一下stdcall,fastcall等宏的具体定义和作用
局部变量中的静态变量的空间在数据段中,不在栈中
程序中动态分配的空间,如malloc分配的空间位于堆中

4. C语言中,如果栈区空间不足,变量将存到哪里 在内存中,静态区、代码区、堆区、栈区 有固定的排列顺序吗

1.栈空间(stack段)用来存放函数中的局部变量和函数调用时的上下文。
2. 全局变量和静态变量存放于进程的数据段。
3. Windows下进程的栈空间会自动增长,一般不会出现空间不足的问题;
4。如果变量实在太大,甚至大于栈可增长的范围,如数百兆,则会编译出错。

5. c语言中全局变量都是静态储存的吗

不太严格的说,可以这么认为。
因为全局变量和静态变量在内存里是储存在一个地方的。叫
data
segment
(数据段),静态区。意思是这个地方的数据的生命周期是不变的,只要程序本身在运行,他们就会存在。所以说他们都存在同一片区域内。
你能想到
静态变量

全局变量
在使用的时候有什么区别吗?唯一的区别就是对于多个文件的访问权限,static
的变量只对本文件有效,而全局变量(除去const)对当前所有文件有效。main.cpp
可以访问
foo.cpp
的全局变量,而不能访问
foo.cpp
的静态变量。
既然他们存在一个地方,如何区分呢。通过变量的
linkage
(即能否被链接器识别)属性,internal
linkage
的变量只能被本文件访问,而
external
linkage
的变量可以被其他文件访问。就这个层面而言,你的想法不能说有错。

6. c语言中的静态存储变量是存储在哪里的,一般什么时候用

在栈中,这个是系统自己完成的,例如int a=4,而堆是可以由程序员进行随时申请的这里的栈类似于数据结构中的栈,而堆类似与数据结构中的链表。

7. C语言的各种数据在内存中如何存储

变量可以存储在内存中的不同地方,这依赖于它们的生存期。在函数外部定义的变量(全局变量或静态外部变量)和在函数内部定义的static变量,其生存期就是程序运行的全过程,这些变量被存储在数据段(datasegment)中。数据段是在内存中为这些变量留出的一段大小固定的空间,它分为两部分,一部分用来存放初始化变量,另一部分用来存放未初始化变量。 在函数内部定义的auto变量(没有用关键字static定义的变量)的生存期从程序开始执行其所在的程序块代码时开始,到程序离开该程序块时为止。作为函数参数的变量只在调用该函数期间存在。这些变量被存储在栈(stack)中。栈是内存中的一段空间,开始很小,以后逐渐自动增大,直到达到某个预定义的界限。

8. c语言内存有几种分配方式

基本上C程序的元素存储在内存的时候有3种分配策略:
静态分配
如果一个变量声明为全局变量或者是函数的静态变量,这个变量的存储将使用静态分配方式。静态分配的内存一般会被编译器放在数据段或代码段来存储,具体取决于实现。这样做的前提是,在编译时就必须确定变量的大小。 以IA32的x86平台及gcc编译器为例,全局及静态变量放在数据段的低端;全局及静态常量放在代码段的高端
自动分配
函数的自动局部变量应该随着函数的返回会自动释放(失效),这个要求在一般的体系中都是利用栈(Stack)来满足的。相比于静态分配,这时候,就不必绝对要求这个变量在编译时就必须确定变量的大小,运行时才决定也不迟,但是C89仍然要求在编译时就要确定,而C99放松了这个限制。但无论是C89还是C99,都不允许一个已经分配的自动变量运行时改变大小。
所以说C函数永远不应该返回一个局部变量的地址。
要指出的是,自动分配也属于动态分配,甚至可以用alloca函数来像分配堆(Heap)一样进行分配,而且释放是自动的。
动态分配
还有一种更加特殊的情况,变量的大小在运行时有可能改变,或者虽然单个变量大小不变,变量的数目却有很大弹性,不能静态分配或者自动分配,这时候可以使用堆(Heap)来满足要求。ANSI C定义的堆操作函数是malloc、calloc、realloc和free。
使用堆(Heap)内存将带来额外的开销和风险。

9. c语言中静态变量是怎么用的

c语言中静态变量作常量使用,用于存储常数。可用const,constant或final等关键字标识,其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区;而如若有需要,有些编译器还可选择为其开辟专用区。

对于静态全局变量来说,针对某一源文件的以static声明的文件级变量与函数的作用域只限于文件内(只在文件内可见),也即“内部连接”,因而可以用来限定变量的作用域。

(9)c语言静态变量存放在数据段扩展阅读:

在函数内以static声明的静态局部变量虽然与自动局部变量的作用域相同(即作用域都只限于函数内),但存储空间是以静态分配而非默认的自动分配方式获取的,因而存储空间所在区域不同。

一般来说,静态分配时存储空间于编译时在程序数据段分配,一次分配全程有效;而自动分配时存储空间则是于调用栈上分配,只在调用时分配与释放,且两次调用间变量值始终保持一致;必须注意,静态局部变量只能初始化一次,这是由编译器来保证实现。

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

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

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

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

(10)c语言静态变量存放在数据段扩展阅读:

注意事项:

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

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

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