static 局部变量存在那个位置?该怎么解决

static 局部变量存在那个位置?
如题 


我自己查资料得出的结果是在静态区

但是有人跟我说是在堆区,这让我感到很诧异,这到底是怎么一回事?

------解决方案--------------------
这具体得看编译器的实现吧。有的编译器会把只读段和代码段合并。
------解决方案--------------------
可以放在全局区
------解决方案--------------------
全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。  程序结束后由系统释放
------解决方案--------------------
请参考:
一个进程在内存中的布局
------解决方案--------------------
全局变量和静态数据都在全局数据区。即使是函数内部的静态局部变量也是如此。
------解决方案--------------------
引用:
引用:
堆区和栈区有啥区别


栈区:存局部变量,定义的参数,比如int,char之类的,在函数结束时,系统会自动收回存储单元。
堆区:new,malloc等动态开辟的存在堆,函数结束时,需要我们用delete、free手动释放存储区。


学习了.
再补个静态区
全局变量和静态变量都存储在静态区。
分两块。一块是存已经初始化的。一块是没初始化的
------解决方案--------------------
jvm把对象信息与成员属性值保存在堆内存
      类信息包括接口定义、类定义、方法定义、static块、静态变量,都保存在方法区又叫代码段。这个区貌似不能gc,出现的OutOfMemberError PermGen overflow就是指要加载的字节码信息所需要的总内存大小已经超出这一区定义的最大值,可以在启动jvm时指定PermGen的最大值。
     栈内存就是方法调用所占用的内存,基本类型变量和方法调用时所引用的各种对象地址保存在此处,以及方法调用产生的方法调用地址信息都保存在栈内存。如果方法调用层次过多,会发生OutOfMemoryError Stack Overflow。递归层数太多时可能会发生这一错误。jvm为每个线程创建一个栈,也就是说同一线程内的所有方法调用共用一个栈,从jdk6开始每创建一个线程默认为线程分配1M内存的栈。可以在启动jvm时指定栈内存的最大最小值。
     堆内存保存java所有对象信息,包括成员属性和对象本身所占用的空间。一个Object对象占用8字节,也是一个没有任何属性的对象所占用的最小字节。Integer对象占用4+8字节,Long对象占用8+8字节。一个对象所占用的全部内存数是它在堆内存中占用的字节数+所有这个对象的引用所占用的字节数。jvm为每个引用分配4字节(32位机的内存寻址位数就是32位刚好4字节)。
     一个jvm进程占用的内存总数是jvm自身消耗的内存+堆内存+所有栈内存的和+方法区所占用的内存。sun的jvm实现,hotspot严格区分这几部分内存,互不干扰。
    通常说的gc就是回收堆内存。栈内存不需要回收,因为随着方法执行,不断伴随着入栈出栈,方法返回时,方法占用的栈内存就被自动释放了。jvm自身消耗的内存由jvm自己管理。方法区占用的内存似乎还不能回收,我也不确定,我看过的文章有不同的说法,有说直到jdk6还不能回收的,有说jdk5以前不能回收的。
------解决方案--------------------
用错标签了,不好意思。。

TITLE b.c
.386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT ENDS
_DATA SEGMENT DWORD USE32 PUBLIC 'DATA'
_DATA ENDS
CONST SEGMENT DWORD USE32 PUBLIC 'CONST'
CONST ENDS
_BSS SEGMENT DWORD USE32 PUBLIC 'BSS'
_BSS ENDS
_TLS SEGMENT DWORD USE32 PUBLIC 'TLS'
_TLS ENDS
FLAT GROUP _DATA, CONST, _BSS
ASSUME CS: FLAT, DS: FLAT, SS: FLAT
endif
PUBLIC _g_f
;---------------------------------数据段 start
_DATA SEGMENT
COMM _g_e:DWORD                ;g_e
_sc DD 05H                       ;sc
_g_f DD 03H                   ;g_f
_?sg@?1??main@@9@9 DD 0aH         ;sg
_DATA ENDS
;-------------------------------数据段 end
PUBLIC _main
;-------------------------------BSS段 start
;BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。
;注意和数据段的区别,BSS存放的是未初始化的全局变量和静态变量,数据段存放的是初始化后的全局变量和静态变量。