精华内容
下载资源
问答
  • 数据存储的方式有以下几种:1)寄存器,寄存器是CPU内部用来存放数据的一些小型存储区域。是最快的存储区域,数量有限,由编译器...局部变量,对象的引用等都存放这里。3)堆内存,位于RAM。与栈内存不同的是,编译...

    数据存储的方式有以下几种:

    1)寄存器,寄存器是CPU内部用来存放数据的一些小型存储区域。是最快的存储区域,数量有限,由编译器根据需求分配。

    2)栈内存,位于RAM,通过堆栈指针上下移动,创建或释放内存,这是一种快速有效的分配存储方法,存储速度仅次于寄存器。所有要求存放在此的数据大小和生命周期都是确定,否则无法移动指针。局部变量,对象的引用等都存放在这里。

    3)堆内存,位于RAM。与栈内存不同的是,编译器不需要知道存储区域的大小和有效时间。通过new关键字创建的对象都存放到这里。

    4)静态存储 ,存储的位置是固定的,但是java对象本身并没有存储到这块区域

    5)常量存储 ,用于存储在编译时期就已经确定的数据。包括字符串常量和基本类型常量,例如:String name=“张三”,或是 public static int RES_CODE=200

    6)非RAM存储区 。硬盘等永久存储空间,数据存储在程序之外,不受程序的控制。比如说存放到磁盘上的数据,或是一些“流对象”(流类型数据),对象转化成字节流,通常被发送给另一台机器。

    需要注意的几点:

    1)栈中的数据大小和生命周期都是确定的,而堆中的数据大小和生命周期则是不确定的

    2)栈内存中的数据是可以共享的,常量存储的数据也是可以共享的,堆则不可以。换句话说,对于equal相等的字符串,常量存储区域只有一份,而堆中则允许有多份。

    3)成员变量存储在其所属的对象里面,也就说对象如果是引用存放在栈中,那么对象的成员变量自然也在栈中,如果说对象是new出来的,对象存储在堆中,那么对象的成员变量也在堆中。

    栈内存中数据共享案例:

    String s1 = "qqqqqqqq";

    String s2 = "qqqqqqqq";

    System.out.print(s1==s2);//结果为true

    展开全文
  • 按照一般教科书上的说法,C语言中的局部变量应该是分配"栈"中的。而实际情况,有些出入录,肯能更容易理解。  这一段代码,唯一的用途,就是分配变量。int func1(void) { volatile int father; volatile ...
  • C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)1.局部变量和全局变量讨论函数的形参变量时曾经提到,形参变量只被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有...
  • //const局部变量 #include <iostream> #include <string> using namespace std; int main() { const int *np; { const intvar0= 10; //从运行结果可知var未存储在栈上 np= &var0; } int var1 = ...

    //const局部变量

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        const int *p = NULL;
        
        {
            const int var1 = 10;
            p = &var1;
            cout << "var1 addr: " << &var1 << endl;
        }
        
        int var2 = 20;
        cout << "var2 addr: " << &var2 << endl;
        
        cout << *p << endl;
        
        return 0;    
    }

    运行结果

     

    谁能给解释一下为什么是这样的结果???


    #include <stdio.h>
    #include <string.h>
    
    
    int main(int argc, char *argv[])
    {
        int *p = NULL;
        
        {
            const int var1 = 10;
            printf("var1 addr: %p\n",&var1);
            p = (int*)&var1;
            printf("p: %p\n",p);
        }
        
        int var2 = 20;
        printf("var2 addr: %p\n",&var2);
        
        printf("*p: %d\n",*p);
        
        *p = 30;
        printf("*p: %d\n",*p);
        
        return 0;    
    }

    结果

    展开全文
  • 静态局部变量保存在全局数据,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。该变量全局数据区内分配内存;静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行...
  • 1、bss是英文block started by symbol的简称,通常是指用来存放程序中未初始化的全局变量的一块内存区域,程序载入时由内核清0。bss段属于静态内存分配。它的初始值也是由用户自己定义的连接定位文件所确定,用户...

    原文地址:https://www.cnblogs.com/dylancao/p/9936957.html

     先看几个概念:

    1、bss是英文block started by symbol的简称,通常是指用来存放程序中未初始化的全局变量的一块内存区域,在程序载入时由内核清0。bss段属于静态内存分配。它的初始值也是由用户自己定义的连接定位文件所确定,用户应该将它定义在可读写的ram区内,源程序中使用malloc分配的内存就是这一块,它不是根据data大小确定,主要由程序中同时分配内存最大值所确定,不过如果超出了范围,也就是分配失败,可以等空间释放之后再分配。

     2、text段是程序代码段,在at91库中是表示程序段的大小,它是由编译器在编译连接时自动计算的,当你在链接定位文件中将该符号放置在代码段后,那么该符号表示的值就是代码段大小,编译连接时,该符号所代表的值会自动代入到源程序中。

     3、data包含静态初始化的数据,所以有初值的全局变量和static变量在data区。段的起始位置也是由连接定位文件所确定,大小在编译连接时自动分配,它和你的程序大小没有关系,但和程序使用到的全局变量,常量数量相关。

     4、stack保存函数的局部变量和参数。是一种“后进先出”(last in first out,lifo)的数据结构,这意味着最后放到栈上的数据,将会是第一个从栈上移走的数据。对于哪些暂时存贮的信息,和不需要长时间保存的信息来说,lifo这种数据结构非常理想。在调用函数或过程后,系统通常会清除栈上保存的局部变量、函数调用信息及其它的信息。栈另外一个重要的特征是,它的地址空间“向下减少”,即当栈上保存的数据越多,栈的地址就越低。栈(stack)的顶部在可读写的ram区的最后。 

     5、heap保存函数内部动态分配内存,是另外一种用来保存程序信息的数据结构,更准确的说是保存程序的动态变量。堆是“先进先出”(first in first out,fifo)数据结构。它只允许在堆的一端插入数据,在另一端移走数据。堆的地址空间“向上增加”,即当堆上保存的数据越多,堆的地址就越高。

      遇到的问题:

      以前这些我都记得,今天遇到实际问题时候,发现远远不是这回事,全局变量能放在text段吗?

    的确可以的,其实,我今天就遇到了这种情况,这个配置的区域实际上是可以在link文件中修改的,假如我的link文件是这样子的:

      其实,这种情况下,假如我定义个const 类型的全局变量,该全局变量就会在text段了,看来,计算的的东西,还是要理解原理才行啊.不过,这个也是反复的过程,有谁不经过磨难,就能快速成长呢?

    展开全文
  • aa这个局部变量存储在栈内存中; 2.Java中常量的存储位置 常量存放常量池中,而常量池堆内存中 3.Java中局部变量的存储位置 局部变量存放栈内存中 4.Java中全局变量和Static常量的存储位置 存放全局数据区内...

    Java把内存划分为以下bai4个部分:
    1、栈区(stacksegment)—由编译器自动du分配释放,存放函数的参数zhi值,局部变量的值等,具体方法dao执行结束之后,系统自动释放JVM内存资源。
    2、堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收。
    3、静态区(datasegment)—存放全局变量,静态变量和字符串常量,不释放。
    4、代码区(codesegment)—存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域。

    here
    1Java中对象的存储位置
    String aa = new String();
    new创建的对象存储在堆内存中;
    aa这个局部变量存储在栈内存中;
    2.Java中常量的存储位置
    常量存放在常量池中,而常量池在堆内存中
    3.Java中局部变量的存储位置
    局部变量存放在栈内存中
    4.Java中全局变量和Static常量的存储位置
    存放在全局数据区内存中
    5.java中static修饰的成员变量及参数存放位置
    存放在代码段内存中

    展开全文
  • 静态变量存储在哪个区

    万次阅读 2019-06-26 22:40:35
    静态变量存储在__ A 全局 B 堆 C 栈 D 常量 参考答案:A 知识点 内存到底分几个? 1、栈(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。 2、堆(heap) — 一般由程序员...
  • 1、栈(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与...
  • C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 讨论函数的形参变量时曾经提到,形参变量只被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量...
  • 成员变量堆内存里,局部变量在栈内存里。(基础类型) 疑问点: 既然成员变量存在于对象中,对象存在于堆中,所以成员变量存在于堆中。那么按照这样的推理,局部变量存在于方法中,而方法存在于对象中,对象存在于...
  • 由编译器需要的时候分配,不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 2、堆 由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一...
  • 向旅游者致欢迎词时,便于保存变量部变地陪的态度要热情,感情要真挚,内容要依情而异,语言要( )计算机存据静山西省总的地势是()。储管成动储存放储提出到2020年要将我国旅游业建设成国民经济的战略性...
  • 昨天看jvm运行态数据存放区域的时候,看到他的栈用于存放局部变量,突然有个问题,为啥局部变量要放在栈中。似乎之前学C的时候,C的局部变量也是放在栈中,当时学写汇编的时候似乎没有这方面的问题。好吧,来...
  • 局部变量与全局变量及其存储方式

    千次阅读 2021-03-19 21:43:33
    局部变量与全局变量及其存储方式 1、变量及其存储的分类 从变量的作用域的角度观察,变量可以分为全局变量和局部变量;变量的存储分为静态存储方式和动态存储方式。 内存中供用户使用的存储空间可分为程序、静态存...
  • 文章目录一、存储区域介绍二、ubuntu系统中输出信息进行验证三、Keil中针对stm32系统进行验证四、总结五、参考资料 ...栈(stack)–由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类
  • 对于局部变量,如果是基本类型,会把值直接存储在栈;如果是引用类型,比如String s = new String("william");会把其对象存储在堆,而把这个对象的引用(指针)存储在栈。 再如 String s1 = new String(“william”)...
  • lua中全局变量,局部变量,非局部变量分别放在什么容器中,他们的快慢顺序是什么,跪求大神
  • “全局”:实际上,“全局”变量相对于定义它们的模块是全局的-有时它们被称为“模块级”变量,而不是全局变量,因为C语言中使用全局变量的大多数缺点都不适用,因为使用模块级全局变量时,既不会有命名冲突,...
  • 存储存储微信软文标题的确定技巧包括以下哪些?下列关于窦房结p细胞4期自动去极化机制的叙述,类别量类别错误的是( )。若截面图形有对称轴,部变则该图形对其对称轴的( )。其默伐根约占森林采伐剩余物的50%。( )函数...
  • 我们先看一下全局变量在反汇编中是怎么体现的,如示例示例代码CH07_3_4。#include#includeint i = 2;int main(void){int j = i;return 0;}1: #include2: #include3: int i = 2;4: int main(void)5: {...
  • 局部变量保存在栈中,只有所在函数被调用时才动态地为变量分配存储单元。该题目考查的知识点是变量的存储类型及性质。C语言经过编译之后将内存分为以下几个区域:(1)栈(stack):由编译器进行管理,自动分配和释放...
  • 局部变量C语言局部变量存储类别自动变量静态局部变量寄存器变量 自动变量 auto int b,c=3; auto可以省略,不写与 int b,c=3;等价 静态局部变量 下面展示例子 static。 #include<stdio.h> int main() { int ...
  • 局部变量存储类别

    千次阅读 2018-08-21 08:52:37
    1.自动变量(auto) int f(int a) { auto int a,b; } auto 可以省略 int b,c=3;...2.静态局部变量(static) #include&lt; stdio.h&gt; int main() { int f(int t); int a=2,...
  • Java中的变量根据不同的标准可以分为两类,以其引用的数据类型的不同来划分可分为“原始数据类型变量和引用数据类型变量”,以其作用范围的不同来区分可分为“局部变量,实例变量和静态变量”。 根据“...
  • C语言中局部变量和全局变量 变量的存储类别(static,extern,auto,register)   局部变量和全局变量 讨论函数的形参变量时曾经提到,形参变量只被调用期间才分配内存单元,调用结束立即释放。这一点表明形参...
  • 静态局部变量和动态局部变量区别

    千次阅读 2020-05-13 10:03:05
    1.静态局部变量属于静态存储类别,静态存储区分配存储单元,整个运行期间都不释放。 而自动变量(动态局部变量)属于动态存储类别,占动态存储空间,函数调用后释放 2.静态局部变量在编译时赋初值,程序运次时已经...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 482,920
精华内容 193,168
关键字:

局部变量存储在哪个区