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 の が も を っている.スタックは には な の を たす やデータ である.スタック、スタックという い はつながっているが、 らには きな いがあり、つながっているのは のせいだ.