A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙百鑫 于 2013-6-19 18:47 编辑

static修饰类中的成员变量或者成员函数在内存中的位置?
有说栈的,有说方法区(说这个的多)。
我想知道是以下内存中的哪里?
1、heap(可定不是吧)  2、stack(栈)  3、data segment区  4、code segment


我听毕老师说是在:方法区\共享区\数据区 ,属于上面哪个区里,还是说在这四个以外的区域!!
求一个官方说法!!!

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

3 个回复

倒序浏览
static修饰的成员变量和成员方法,是属于类专有的,所有该类的实例都共享同一副本。类加载了静态方法就会被加载入静态方法区,静态成员是共享的,也可以叫共享区吧。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 注意休息哦

查看全部评分

回复 使用道具 举报
毕老师所说的方法区、共享区、数据区,实际就是源于汇编语言的数据段(data segment)中的一份存储区域,。而段式存储是内存管理的一架构,这个只需了解就行。数据段是指用来存放程序中已初始化的全局变量的一块内存区域它的分配方式是静态(static)的。所以要注意的是那它即不属栈内存也不属堆内存。

此外:堆:是存放引用类型的。比如:string inStack = "在堆中";inStack 这个对象变量就是在栈中了,而它是引用类型,那么它的value就在堆中了。
      栈:存局部变量,定义的参数,比如int,char之类的,以及调用现场存在栈区,在函数结束时,系统会自动收回存储单元。

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1

查看全部评分

回复 使用道具 举报
data segment,在该独立的区域,该区的所有信息和数据可以被大众共享,就像咱论坛,不管是会员与否,都可以观看、分享咱信息。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马