JAvaのスタックとスタックの違い!!!

8188 ワード

Java           ,  (        。      new、newarray、anewarray multianewarray      ,               。           ,                ,             ,                ,Java                    。    ,             ,      。 

     ,        ,      ,       。    ,                   ,     。                (,int, short, long, byte, float, double, boolean, char)     。 

           ,             。        : 
int a = 3; 
int b = 3; 
      int a = 3;              a   ,         3   ,     ,  3    ,   a  3。    int b = 3;    b      ,        3   ,  b    3。  ,    a b     3   。 

  ,    a=4;               4 ,    ,  4    ,  a  4;      ,    a      。  a         b  。 

                                   ,      a         b,          ,        。                     ,             。 

String           。   : 
String str = new String("abc"); 
String str = "abc"; 
        ,     new()      ,        。               。 
              String        str,           "abc",    ,  "abc"    ,  str  ”abc”,     ”abc”     str  “abc”。 

             , equals()  ;                     , ==,            。 
String str1 = "abc"; 
String str2 = "abc"; 
System.out.println(str1==str2); //true 
    str1 str2         。 

String str1 =new String ("abc"); 
String str2 =new String ("abc"); 
System.out.println(str1==str2); // false 
 new           。       。 


            ”abc”   ,               .              .                     ,  JVM                           。   String str = new String("abc");   ,           ,            ,          ,          。 

    ,    :        String str = "abc";       ,        ,   String    str。    !          !                   。    new()                 。 
  String  immutable  , String           ,      StringBuffer ,       。 

その他の答え:
( )
  ,         ,        ,       。    ,          。       。    、                    。

  ,      ,               (                 )。           。                     ( :    ),    ,                  ,     。

  ,         ,            ,          。         ,               。    ,                 ,        ,          ,                 。

  ,              。  ,                            。  ,       ,                ,            。        ,    ,           ,     ;      (  ),      ,    。          ,          ,           。     ,       ,    。

(二)
      ,        

1.  (stack)  (heap)  Java   Ram        。 C++  ,Java       ,             。 

2.      ,        ,       CPU     。    ,                   ,     。  ,       ,   3 。                ,             ,Java                    。    ,             ,      

(三)
Java        :      ,      。

                                   。

              ,Java               ,          ,Java                  ,              。

        new        。

        , Java              。

              ,               ,                          ,                    。

                     ,                             。
(四)
heap :    new     
stack :    。
data segment:    ,     。
code segment:    
(五)
   String str = new String("test");
    ,           new      "test" String  ,         str
        "test"  , str "test"   。
  Java              ,            。                    str          ,      ,    ,           ,       ,              ,   Gc        gc 。
                    。

(六)
             ,     
      (int,short)       ,           
           ,               ,   GC   
( )
           ,                ,             ,                ,Java                    。    ,             ,      。 

     ,        ,      ,       。    ,                   ,     。                (,int, short, long, byte, float, double, boolean, char)     。 
( )
>>>  。      RAM(       )  ,      “    ”         。         ,       ;    ,        。       、           ,      。     ,Java                      “  ”  “     ”。              ,           。                ,       Java          ——       ,  Java         。 
>>> 。          (   RAM   ),      Java   。     ,“   ”  “ ”(Heap)                            ,                      。  ,                。         ,   new             。       ,             。  ,        ,           :                  !

( )
、 —プログラムのメモリはc/C++によってコンパイルされたプログラムによって されるメモリを り てて のいくつかの 1、スタック (stack)—コンパイラによって に り てられて され、 のパラメータ 、 の などを する.その は、データ のスタックに ています.2、ヒープエリア(heap)— にプログラマーによってリリースが り てられ、プログラマーがリリースしない 、プログラム にOSによって される がある.データ のスタックとは なることに してください. り て はチェーンテーブルに ています.ほほほ.3、グローバル ( )-、グローバル と の はブロックにあり、 されたグローバル と はブロック にあり、 されていないグローバル と されていない は する のブロック にある.-プログラム にシステムリリース4、 - がここに かれます.プログラム 、システムによって5、プログラムコード - のバイナリコードを する. 、 プログラムこれは が いたもので、 に //main.cpp int a=0です.グローバル char*p 1;グローバル main(){int b;スタックchar s[]=「abc」;スタックchar*p 2;スタックchar*p 3=「123456」;123456は 、p 3はスタック にある.static int c=0;グローバル( ) p 1=(char*)malloc(10);p 2=(char*)malloc(20);10と20バイトが り てられた はスタック にある.strcpy(p 1、「123456」);123456は に され、コンパイラはp 3が す「123456」と1つの に する がある.} 、スタック、スタックの 2.1 stack:システムによって に り てられる. えば、 の int bを する.システムは にスタックの でbのために heapを きます:プログラマーが で する があって、そして きさを して、cの でmalloc はp 1=(char*)malloc(10)のようです;C++では、p 2=(char*)malloc(10)などのnew を します.ただし、p 1、p 2 はスタック にあることに してください.2.2 のシステムの スタック:スタックの りの が した より きい り、システムはプログラムにメモリを する.そうしないと、 スタックがオーバーフローする.≪ヒープ|Heap|emdw≫:まず、オペレーティング・システムに きメモリ・アドレスを するチェーン・テーブルがあることを っておく があります.システムがプログラムの を すると、チェーン・テーブルを り、 した よりも きな の のヒープ・ノードを します.その 、そのノードを きノード・チェーン・テーブルから し、そのノードの をプログラムに り てます.また、ほとんどのシステムでは、このメモリ の のアドレスに の り てのサイズが され、コードのdelete がこのメモリ を しく することができます.また, つかったスタックポイントの きさが の きさに しいとは らないため, な を に きチェーンテーブルに する.2.3 サイズの スタック:Windowsでは、スタックは アドレスに されたデータ であり、 したメモリの である.スタックトップのアドレスとスタックの はシステムで め められており、WINDOWSではスタックの きさは2 M(1 Mということもあり、つまり1つのコンパイル に される )であり、 された がスタックの りの を えるとoverflowが される.したがって、スタックから られる は さい.ヒープ:ヒープは アドレスに されたデータ で、 なメモリ です.これは,システムがチェーンテーブルで する きメモリアドレスであるため, であり,チェーンテーブルの は アドレスから アドレスである.スタックのサイズは、コンピュータシステムで な メモリに されます.このことから,スタックが られる は であり, きいことが かる.2.4 の :スタックはシステムによって に り てられ、 が い.しかし、プログラマーはコントロールできません.スタックはnewで り てられたメモリで、 に が く、メモリの が しやすいが、 も である.また、WINDOWSでは、VirtualAllocでメモリを り てるのが の である. はスタックではなく、スタックではなく、プロセスのアドレス に メモリを すのではなく、 も であるが.しかし、 が く、 も な2.5スタックとスタック のストレージコンテンツスタック: び し に、 のスタックはメイン の の の ( び し の の )のアドレスであり、 いで の パラメータであり、 くのCコンパイラでは、パラメータは から にスタックされ、 のローカル である. はスタックに らないことに してください. の び しが すると、ローカル は にスタックを て、それからパラメータで、 にスタックトップポインタは も に されたアドレス、つまりメイン の の を し、プログラムはこの から を します.ヒープ: 、ヒープのヘッダにヒープのサイズを1バイトで します.スタックの な はプログラマーが します.2.6アクセス の char s 1[]=「aaaaaaaaaaa」;char *s2 = "bbbbbbbbbbbbbbbbb"; aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbはコンパイル に した.しかしながら、 のアクセスでは、スタック の はポインタが す ( えばスタック)よりも い. えば、#includevoid main(){char a=1;char c[]="1234567890";char*p="1234567890";a=c[1];a=p[1];return;} するアセンブリコード10:a=c[1];00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh] 0040106A 88 4D FC mov byte ptr [ebp-4],cl 11: a = p[1]; 0040106 D 8 B 55 EC mov edx,dword ptr[ebp-14 h]00401070 8 A 42 01 mov al,byte ptr[edx+1]00401073 88 FC mov byte ptr[ebp-4]、al 1 は み し に の をレジスタclに み し、 2 はポインタ をedxに に み し、edxに づいて を み すのは らかに い.2.7まとめ:スタックとスタックの いは の で ることができる:スタックを うのは たちがレストランで をするのと じで、 ( を す)、お を う、 べる( する)だけで、 になったら って、 を る、 を うなどの と を う、 を うなどの の を にする はありません. のメリットは いですが、 は さいです. を うのは で きな を るようなもので、 ですが、 の みに っていて、 が いです.スタックとスタックの いは にオペレーティングシステムのスタックとスタックに けられ、 のように、 くは いません.また、データ のスタックとスタックもあり、これらは なる です.ここでのスタックは、 には(スタックの を たす) キューのデータ を し、1 の が も を っている.スタックは には な の を たす やデータ である.スタック、スタックという い はつながっているが、 らには きな いがあり、つながっているのは のせいだ.