首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

变量常量静态变量存储位置

4、全局/静态存储区 全局变量静态变量被分配到同一块内存中,在以前C语言中,全局变量又分为初始化未初始化,在C++里面没有这个区分了,他们共同占用同一块内存区。...5、常量存储区 这是一块比较特殊存储区,他们里面存放常量,不允许修改(当然,你要通过非正当手段也可以修改)。...例1:C语言程序 int x; void main() { } 变量x存储在内存哪个区域?...答:static全局变量普通全局变量存储区域相同,不同是: static全局变量只在声明此static全局变量文件中有效; 普通全局变量对整个源程序都有效,当此源程序包含多于一个文件程序时,对其他文件依然有效...答:static局部变量存储区为静态存储区,普通局部变量存储区为栈; static局部变量生存周期为整个源程序,但是只能在声明函数中调用,并且其值与上一次结果有关;而普通局部变量生存周期为声明其函数周期

1.1K10

关于静态常量类型 修饰 类方法变量部分理解

分两个部分进行记录 目录 静态(static) 修饰类/方法/变量 静态(static) 修饰类 静态(static) 修饰方法/变量 常量(final) 修饰类/方法/变量 常量(final) 修饰类...静态(static) 修饰方法/变量 静态属性、静态方法静态属性都可以被继承隐藏而不能被重写{这里之所以不能被重写,是因为重写目的在与多态使用,因为是静态方法,无法实现多态,所以就算重写也是无用...常量(final) 修饰类/方法/变量 常量(final) 修饰类 final 修饰类不能被继承。 常量(final) 修饰方法/变量 1.final修饰成员成员变量,可以被继承。...final 修饰成员变量必须在声明同时赋值,如果在声明时候没有赋值,那么只有 一次赋值机会,而且只能在构造方法中显式赋值,然后才能使用。...final 修饰局部变量可以只声明不赋值,然后再进行一次性赋值。

85320
您找到你想要的搜索结果了吗?
是的
没有找到

变量属性: 不可变(immutable), 可变(mutable), 重定义(shadowing), 常量(const), 静态(static)

注意:变量类型可变性都可以变。 // 变量 x 从整数数据类(i32)型变成了字符串数据类型(String)。 // 变量 x ,因为声明了 mut ,可变性也变成可变。...("{}", x); } 重定义特性其它特点: 重定义特性可以作用于不可变变量 重定义特性可以作用于可变变量 重定义特性不可以作用于 static 变量 重定义特性不可以作用于 const 常量 常量...注意:这种 copy 也会发生在外部包被编译场合。因此,一定要确保你常量不会在后续开发中发生变化。 静态(static) 一个静态变量在应用中拥有唯一内存地址。...大多数场合,静态变量会被定义为可变。 在 Rust 安全哲学中静态变量不是线程安全,所以可变静态变量在被读场合,都需要标识 unsafe。...数据占有内存比较大场合,使用静态变量; 程序需要变量地址属性情况下,使用静态变量变量需要是可变情况下,使用静态变量; 其它场合,推荐使用常量; 参照 官方文档: Constant Items

1.1K20

面试题系列第5篇:JDK运行时常量池、字符串常量池、静态常量池,还傻傻分不清?

【番外篇】本篇核心:JDK各个版本中JDK运行时常量池、字符串常量池、静态常量功能及存储位置。 在写本系列文章时,发现一旦追究起底层实现都会涉及到一些内存结构问题。...了解了JVM内存结构,那么运行时常量池、字符串常量池、静态常量池对于都位于JVM什么区域呢?先来看看它们定义及功能。...class文件中除了有类版本、字段、方法、接口等描述信息外,还有一项信息是常量池(Constant pool table),用于存放编译期生成各种字面量符号引用,这部分内容将在类加载后进入运行时常量池中存放...在JDK1.7字符串常量池和静态变量被从方法区拿到了堆中,运行时常量池剩下还在方法区, 也就是hotspot中永久代。 ?...总结一下就是:静态变量处于编译器,存在于class文件内,可通过javap verbose命令查看字符串合并时查看静态常量池里面的内容;字符串常量池曾经属于运行时常量一部分,位于方法区,但随着JVM

5.8K20

java学习之路:14.类构造方法,静态变量常量方法,类主方法

构造语法如下: public Book() { //构造方法体 } 在构造方法中可以为成员变量赋值,这样当实例化一个本类对象时,相应成员变量也将被初始化, 如果类中没有明确定义构造方法,...2.静态变量常量与方法 由static关键字修饰变量常量与方法被称做静态变量常量与方法。 静态变量常量与方法被称为静态成员,静态成员属于类所有。...静态数据与静态方法作用通常时为了提供共享数据或方法, public class array{//定义一个类 final static douoble PI =3.1415926;//在类中定义静态常量.../调用静态变量 array.fun1(); //调用静态方法 } } 虽然静态成员也可以使用“对象.静态成员”形式进行调用,但是不建议这样做,因为这样容易混淆静态静态成员。...需要注意点: 在静态方法中不可以使用this关键字。 在静态方法中不可以直接调用非静态方法。 java规定不能将方法体内局部变量声明为static。

88441

在项目中使用js声明一些全局静态常量并且不可改变

我们会遇到这样一个场景, 系统中有5个角色, A,B,C,D,E 角色值是1,2,3,4,5 因为角色这个变量,在路由里有用到,权限管理中有用到,还有一些业务场景处有用到,我们不能用到时候 就直接这样写...)){ // 业务代码 } 这样写是非常不稳健, 首先,在这里看到1,2,3,没有明确定义,单纯看这段代码,不清楚1,2,3代表什么, 其次,假如A角色值某一天改了一下, 那这么才能找到所有用到...A角色代码(当然改变角色值得情况很少,但并不排除) 最后,假如我们现在加了一个角色,那我们快速知道应该修改哪些代码,使业务场景覆盖到这个新角色 这个角色是不会变,我们也不允许它们改变, 如果我们使用是...mounted() { console.log(ROLE.ROLE_A) ROLE.ROLE_A = 2 console.log(ROLE.ROLE_A) } 被const创建变量...而且鼠标放上去会直接显示定义代码注释, 让人一目了然 这种变量声明方式可以用于系统中角色, 会员等级,版本,产品线,等一旦定义了不会再变常量

83210

方法区元空间实现之jdk78字符串常量池、运行时常量池、静态变量到底在哪?

储存已加载类型信息、常量静态变量、即时编译器编译后代码等数据; 2、常量池:编译器生成各种字面量符号引用; 3、关于字符串常量运行时常量位置说明: JDK版本 方法区实现 变化 jdk1.6...永久代 字符串常量池、运行时常量池、静态变量都是在永久代中 jdk1.7 永久代 字符串常量池和静态变量被移动到了堆当中,运行时常量池还是在永久代中 jdk1.8 元空间 字符串常量池和静态变量仍然在堆当中...个人理解:对于字符串常量这种创建完成用几次就不被使用对象,是很容易被回收。而要进行频繁垃圾回收地方是堆空间, 这样在JDK7就把字符串常量池移动到堆空间中就是很明智有必要选择了。...这样就避免了放到不频繁进行垃圾回收元空间中应该被垃圾回收对象而不能及时进行垃圾回收浪费空间现象出现。 思考:那么静态变量为什么也要在JDK7字符串常量池一起移动到堆空间中呢?...静态变量是不是类一样生命周期吗?

48200

Java动态绑定与静态绑定之胡思乱想

Java动态绑定与静态绑定实现原理  关于实现原理,规范且准确解释,在这里可以找到。  下面我想用自己的话概括一下,从而使自己更好理解。 ...为了更好理解,放两张图吧:  第一张是常量图:    在这个常量池中,有28项,每一项都称之为一个常量表,都有相应结构。...5.你前面都在说方法,那你知道变量静态连接还是动态连接吗?  答:先说答案,变量采用静态连接。这正是开篇讲写程序时遇到困扰我问题,也正是由于此,我才想到了要学习静态绑定与动态绑定。...答:根据5中分析,由于变量采用静态绑定,并且是隐藏,所以,子类可以完全自由父类变量一样变量名字,并且采用不同修饰符,静态绑定会确保正确性。...7.通过学习静态绑定与动态绑定原理,你也应该能很准确解释 为什么你声明哪个类,就只能执行这个类中拥有的方法(因为常量池解析时是根据你声明类型方法表来做,而不是根据实际类型!)

1K40

Java | 字段(Field)

在类中有下列几种变量(Variable): 类中成员变量,称为字段。 代码块中变量,称为局部变量。 方法构造方法声明变量,称为参数。 局部变量参数始终被归类为“变量”(而不是“字段”)。...一些自动生成名称中可能会包含美元符(请参阅 nested(String) 示例),但变量名应始终避免使用它。 下划线(_):按惯例,变量名不使用下划线。下划线只用于常量字段名。 不允许使用空格符。...如前面示例中 CONSTANT_FIELD 字段。 静态字段(Static Field):声明为 static 字段。常量字段变量都属于静态字段。...非静态字段(Non-Static Field):没有声明为 static 字段。又可称为实例变量。 成员变量(Member Variable):除常量字段外其他所有字段。...提示:声明为 final 成员变量,类似于常量,可作为对成员变量一种限定保护。 访问字段 字段通过其名称进行访问。在访问时,必须使用明确无误名称。

2.4K10

C++中Const常量机制分析

我们来看看0x4008c8是位于程序哪个段。 执行命令 readelf -s msgq 看到符号var地址程序输出完全一致。...我们来看看0x4008c8是位于程序哪个段。 执行命令 readelf -s msgq 看到符号var地址程序输出完全一致。...结论: 对于全局变量,局部静态变量,全局静态变量,存储在程序只读数据段,不能被修改。 2,如果const变量被修改,会出现什么问题? 在问题1中已经得到了结论验证。...3,CC++中实现机制一样吗? 3.1不同点: 对于局部const变量,C++在变量具体使用地方通过常量替换实现。C语言中表示只读变量。 3.2 相同点: 都不能对只读数据段常量进行修改。...特别注意点: 对于头文件定义字符串指针常量正确定义如下: const char * const constCharPtr="hello const"; 表示指针常量,则可以放在头文件。

2.2K151

【计算机本科补全计划】Java学习笔记(三) 数据类型

,Java字符串常量也是包含在两个引号之间字符序列。...下面是字符串型字面量例子: "Hello World" "two\nlines" "\"This is in quotes\"" 字符串常量字符常量都可以包含任何Unicode字符。...10、类变量静态变量) 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法语句块之外。 无论一个类创建了多少个对象,类只拥有类变量一份拷贝。...静态变量除了被声明常量外很少使用。常量是指声明为public/private,finalstatic类型变量常量初始化后不可改变。 静态变量储存在静态存储区。...经常被声明常量,很少单独使用static声明变量静态变量在程序开始时创建,在程序结束时销毁。 与实例变量具有相似的可见性。

65240

CC++ 学习笔记二(变量、表达式)

在计算机中提供给变量两个信息 变量地址 ,操作系统给变量分配若干内存首地址 变量值 ,内存单元中存放数据 从变量存储位置进行区分,可分为 内存 CPU寄存器 两类 从变量生命周期进行区分...而在C语言提供4种存储类型 1.auto 自动 2.static 静态 3.register 寄存器 4.extern 外部 外部变量内部变量区别 ?...在C语言中,可以使用static声明一个静态变量,也可以在函数外声明一个全局变量,其他文件使用extern对该变量进行访问。他们两者存储方式都是使用静态存储方式,存储在内存静态存储区。...const其实提供了一种保护机制,保证变量只能从数据段中读取数据,确保了他不被改变。 表达式 表达式是由常量变量、函数运算符构成。...typedef 是一种类型新别名, 而宏是简单字符串替换 宏定义作用时间是在 预处理阶段 typedef 作用时间是在 编译阶段 在使用宏定义期望替换类型时,切记不可同一行类声明两个变量 typedef

1K00

【测开技能】Java语言系列(三)变量和数据类型

例如,引用类型最常用就是String字符串: String s = "hello 北京"; 常量 定义变量时候,如果加上final修饰符,这个变量就变成了常量: final double PI =...针对局部变量,实例变量,类变量总结如下: Java 局部变量 局部变量声明在方法、构造方法或者语句块中; 局部变量在方法、构造方法、或者语句块被执行时候创建,当它们执行完成后,变量将会被销毁; 访问修饰符不能用于局部变量...实例变量 实例变量声明在一个类中,但在方法、构造方法语句块之外; 当一个对象被实例化之后,每个实例变量值就跟着确定; 实例变量在对象创建时候创建,在对象被销毁时候销毁; 实例变量值应该至少被一个方法...无论一个类创建了多少个对象,类只拥有类变量一份拷贝。 静态变量除了被声明常量外很少使用,静态变量是指声明为 public/private, final static 类型变量。...静态变量初始化后不可改变。 静态变量储存在静态存储区。经常被声明常量,很少单独使用 static 声明变量静态变量在第一次被访问时创建,在程序结束时销毁。 与实例变量具有相似的可见性。

15210

Java核心-核心类与API(1)

因此,JVM为了提升性能减少内存开销,内置了一块特殊内存空间即常量池,以此来避免字符串重复创建。...类静态成员变量也放在堆区,其中基本数据类型是直接保存值,而复杂类型是保存指向对象引用,非静态成员变量在类实例化时开辟空间并且初始化。要知道类几个时机,加载-连接-初始化-实例化。...常量池在编译期间就将一部分数据存放于该区域,包含基本数据类型如int、long等以final声明常量值,String字符串、特别注意是对于方法运行期位于栈中局部变量String常量值可以通过...4)静态域 位于方法区一块内存。存放类中以static声明静态成员变量。...5)方法区 是各个线程共享内存区域,它用于存储class二进制文件,包含了虚拟机加载类信息、常量静态变量、即时编译后代码等数据。

28921

笔记(一 )——Java零碎知识摘录

8、字符串在Java生产开发中使用频率是非常高字符串对于我们而言非常关键。在C中是没有String类型,那么C语言要想实现字符串就必须使用char数组,通过一个个字符来组拼成字符串。...字符串一定会被保存到常量池中,且Java虚拟机如果发现常量池中已经存在需要创建字符串中,它就不会重复创建,而是指向那个字符串即可,(深入Java源码剖析之字符串常量)这就类似于如下操作。...10、java中声明了一个变量,便会给这个变量分配内存空间,且被声明变量会对应有一个内存地址生成。...字符串常量(例如:String a="123")final修饰基本数据类型常量。 非RAM(随机存取存储器)存储:硬盘等永久存储空间 ?...每个静态变量内存地址是唯一,UserBean类中有一个name静态变量,不管new UserBean()多少个实例,name变量所指向内存地址是唯一(也就是说m1.name、m2.nameUserBean.name

52720

C内存管理一 概述

2.同学请说说一个函数在堆栈中调用过程(首先要知道函数过程是保存在什么中)。 3.静态变量、全局变量、局部变量常量等哪些是保存在堆中,哪些是栈中,哪些是静态区域中。...看它定义:栈是一种先进后出线性表,只要符合先进后出原则线性表都是栈。 而堆是一种二叉树,有最大推、最小堆,我们常用什么冒泡、选择等可以用于堆排序。...例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间例如:声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 2、堆区(heap): 一般由程序员分配释放, 若程序员不释放...3、全局区(静态区)(static):全局变量静态变量存储是放在一块,初始化全局变量静态变量在一块区域, 未初始化全局变量未初始化静态变量在相邻另一块区域。...(程序结束后有系统释放 ,即生命周期) 4、文字常量区 —常量字符串就是放在这里。 5、程序代码区—存放函数体二进制代码。

44210

C++复习笔记——C++ 关键字

被其修饰变量(外部变量)是静态分配空间,即程序开始时分配,结束时释放。用其声明变量或函数应该在别的文件或同一文件其它地方定义(实现)。在文件内声明一个变量或函数默认为可被外部使用。...在 C++ 类成员变量声明为static(称为静态成员变量),意味着它被该类所有实例所共享,也就是说当某个类实例修改了该静态成员变量,其修改值为该类其它所有实例所见;而类静态成员函数也只能访问静态成员...类静态成员变量必须在声明文件范围内进行初始化才能使用,private类型也不例外。...mutable mutable(易变)是 C++ 中一个不常用关键字。只能用于静态常量数据成员。...它提供了一种简洁书写,并且能够生成效率更好代码。但是,switch 后面的判断只能是int(char也可以,但char本质上也是一种int类型)。

1.3K30

day9嵌入式(2022.1.15)

.init 系统初始化代码段 .text 用户代码段 .rodata 常量数据段(只读数据段) .data 已初始化静态数据段 .bss 未初始化静态数据段 哪些段是静态不变,哪些段是动态变化?...备注: 局部变量全局变量 函数内部定义变量,称为局部变量,位于栈空间 函数外部定义变量,称为全局变量,位于静态数据段 静态数据分为 .data.bss int g_a=100; // .data...100位于常量区(只读区) float n2=3.5; // n2位于栈空间,浮点型常量3.5位于常量char n3='A'; // n3位于栈空间,字符常量'A'位于常量char *str...= "hello"; // str位于栈空间,字符串常量"hello"位于常量区 // str[0] = 'a'; // 尝试对常量区写入会导致出现段错误 printf("%c\n", *str)...,需要添加外部声明 extern void func_2(void); // static:静态 // int g_a = 200; // 未添加static,是外部链接类型 static int

33020

内存分配——静态存储区 栈 堆 与static变量

静态存储区:内存在程序编译时候就已经分配好,这块内存在程序整个运行期间都存在。它主要存放静态数据、全局数据常量。...但是,良好编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。 代码区:存放函数体二进制代码。 文字常量区 —常量字符串就是放在这里。...当static用来修饰全局变量时候,它就改变了全局变量作用域(在声明文件之外是不可见),但是没有改变它存放位置,还是在静态存储区中。...因为指针变量p仅仅能够存储某个存储空间地址,数据“Hello World1”为字符串常量,所以存储在静态存储区。虽然通过p[2]可以访问到静态存储区中第三个数据单元,即字符‘l’所在存储单元。...但是因为数据“Hello World1”为字符串常量,不可以改变,所以在程序运行时,会报告内存错误。并且,如果此时对pp1输出时候会发现pp1里面保存地址是完全相同

1.3K30
领券