Ⅰ static变量存储在哪里
该变量在全局数据区分配内存;
未经初始化的静态全局变量会被程序自动初始化为0(自动变量的值是随机的,除非它被显式初始化);
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;
静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的
代码区,全局数据区,堆区,栈区
一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。细心的读者可能会发现,Example 1中的代码中将
static int n; //定义静态全局变量
改为
int n; //定义全局变量
程序照样正常运行。
的确,定义全局变量就可以实现变量在文件中的共享,但定义静态全局变量还有以下好处:
静态全局变量不能被其它文件所用;
其它文件中可以定义相同名字的变量,不会发生冲突;
Ⅱ 请教变量数据在内存中的存储方式,比如int a=2,那么在内存中是怎么存储的呢
额 你理解错了 。 跟本就不存在a的ASCII码值。
这样看:定义了一个变量,给它取个名字叫a,这个名字是给你程序员看的,计算机跟本不看这个a,a对计算机来说只是一个标识,它标识着在内存中所占用的一个大小为4B的内存空间,并且!这4B的空间存放一个整数,其值为2. 而在存储的时候是这样存的
由于内存的最小单位是字节,也就是1B是最小的单位,而一个int类型的数据在32的系统中要占用32位大小, 换算一个 8位=1字节 即8bit=1B 那么32位=4字节。 这个2转换成二进制数是10 ,但计算机要求用32位的数来存放这个2 ,咋办? 补0呗。在哪补? 肯定不能在后边补啊,那就变成别的数了—— 那,那就在前补。
所以是00000000 00000000 00000000 00000010
以上便是2这个数在计算机内存中的形式, 每8位一组分成4组刚好是4B大小,所以内存中就有连着的4个内存单元 来存放这个数值2. 而这一内存单元我们把它叫做a, 计算机也正是通过这个名字来标识这个数。
综上,总结一下,a这个字母是给程序员看的, 计算机不认识a这字母,a在计算机中仅仅是转换为一个计算机用于标识这个数值2的其它的什么东西。 具体是什么东西你不必要了解,其实我也不知道。而这个2在内存中存放的形式是占用4个内存单元的空间。
楼主想更深入了解这方面,建议把c语言学一遍后学学汇编语言就很清楚了
Ⅲ java 成员变量的值放在内存的哪里
对象在堆中,而对象的数据成员当然是在对象的空间之中,因而对象的数据成员当然是在堆中了.
属于类的数据成员当然是在类的内存空间中,而类是装载在代码方法区的那个内存空间中的,而这个内存空间也是堆中的一部分,因此:属于类的数据成员当然是在堆中了.
Ⅳ 程序的局部变量 全局变量 动态申请数据分别存储在什么地方
程序的局部变量全局变量动态申请数据分别存储在栈里。
普通局部变量在堆栈空间上分配,当局部变量的函数被多次调用时,局部变量每次在堆栈上的位置都不相同。还可以在堆上动态分配局部变量(malloc),但是要记住在耗尽堆空间后释放zd。
内存分配上的栈空间时要注意内存的,不能分配太多的内存。如果堆栈中的空间小于请求的空间大小,则系统将显示堆栈溢出并给出相应的异常信息。但堆不同,堆可分配空间很大。
(4)变量的值存储在哪里扩展阅读:
注意事项:
对局部变量进行分类
1.位置:编译器将静态局部变量放在全局存储区域中。数据,因此尽管它是本地的,但它存在于程序的整个生命周期中(它在定义时产生,并随着程序的结束而结束)。
2.访问权限:静态局部变量只能由其作用域内的变量或函数访问。也就是说,尽管它将存在于程序的整个生命周期中,但是其他函数和源文件不能访问它,因为它是静态的。
3.值:如果用户没有初始化静态局部变量,编译器会自动将其赋值为0,每次调用静态局部变量时都会使用最后一次调用后的值。
Ⅳ C语言变量存储在内存(memory)中的什么地方
c语言中数据存储分为以下几个部分,每个部分存储不同的内容:
1、栈区:存放函数的参数值,局部变量的值等。
2、堆区 :存储动态生成的对象,一般由程序员分配释放。
3、静态区或者全局区: 存储全局变量和静态变量。
4、文字常量区 :存储常量字符串。
5、代码区 : 存储函数体的2进制代码。
Ⅵ c语言中是变量存储地址还是地址存储变量啊
变量在内存中存储
每个内存位置都有一个编号,就是内存地址值
地址值,就是个整数,所以,也可以存储到变量中,C中的指针变量,就是专门用来存储地址的变量
。