Javaからc++に移動

3985 ワード

1)スタック領域:一般的に格納されている関数のパラメータ値、ローカル変数の値などをコンパイラによって自動的に割り当てて解放する2)スタック領域:プログラマによって割り当てられて解放される.プログラマが解放しない場合、プログラム終了後にOSによって回収される可能性がある3)レジスタ領域:スタックトップポインタと命令ポインタ4を保存するためのグローバル領域(静的領域):グローバル変数と静的変数は一緒に格納される.初期化されたものと初期化されていないものは別々です.プログラム終了後システムよりリリース5)文字定数領域:プログラム終了後システムよりリリース格納定数文字列6)プログラムコード領域:関数体を格納するバイナリコード
JAVAでもスタックとスタックの区別があるのは知っていますが、コードを書くときは彼らの違いを考えていないので、よく分からない人が多いです.1.JAVAスタックとC++スタックの管理原理が異なる.両方のスタック管理者が異なります.C++自身はスタックを管理せず,OSが提供するインタフェースを直接使用して管理する.JAVAのスタックはJVMによって管理され、JVMはゴミ回収メカニズムを実現し、スタック効率などの問題を解決するために、スタック管理の面でいくつかの改善を行った.JAVAメモリ管理では簡単な説明がありますが、ここでは詳しく説明しません.2.JAVAスタックはC++スタックの実現効果と類似している.スタックはプログラム実行時空間であり、スタックフレームからなり、スタックトップポインタによって制御され、メモリの割り当てと解放の効率は高いが、使用は柔軟ではない.スタックは、プログラム内のオブジェクトを動的に管理するために使用され、柔軟に使用されますが、スタックに比べて効率が低くなります.3.JAVAスタックはC++スタックとは使用方法が異なります.JAVAはスタックのみを使用してプログラムの実行と簡単なタイプの保存を行い、すべてのオブジェクトをスタック内の管理に配置します.C++のスタックとスタックは、開発者のコードに応じてオブジェクトを管理する方法によって、オブジェクトを格納するために使用できます.(重要)
変数と配列を定義する場合、Javaはデフォルトで初期化され、C++は初期化されません.クラスでメソッドで変数、動的配列を定義する場合、Javaはデフォルトで初期化され、C++は初期化されません.
Javaにはゴミ回収メカニズムがありますが、C++はありません.Javaにはゴミ回収メカニズムがあり、Javaではnewオブジェクトを管理せず、解放を考慮する必要はありません.仮想機会は自動的にメモリを回収します.C++でnewがオブジェクトになったり、メモリを割り当てたりした後、必ず解放してください.そうしないと、メモリが漏れてしまいます.C++作成オブジェクトを自分で解放するには、参照カウントのメカニズムを自分で実装します.
Javaには参照のみで、ポインタはありません.C++には参照があり、ポインタもあります.java:
Test t = new Test();

new Test()は、このオブジェクトへの参照であるTestクラスのオブジェクトを作成します.したがって,tがパラメータとして伝達されると,主関数の値が変化する.c++
//     Test   ,              p
Test* p = new Test();
//     Test   
Test t;
//     Test   t2,   t   .   t   
Test& t2 = t;

クラスのメンバーを定義する場合、Javaは初期値を付与できます.C++はjavaを付与できません.
public class Test {
    private int iValue = 0;
    private float fValue = 10.5f;
    private String name = "zhangsan";
}

直接classで付与値を初期化します.c++:
class Test {
public:
    int iValue = 0;
    int fValue = 10.5;
    std::string name = "zhangsan";
};

エラーを報告して、直接値を割り当てることができなくて、error C 2864:‘Test::iValue’:only static const integral data members can be initialized within a class
Javaでfinalで変更しないメンバーを修飾し、C++でconstで変更できない変数を修飾する
C++の配列C++の配列は複雑で,静的に割り当てられた配列と動的に割り当てられた配列の区別がある.
静的に割り当てられた配列静的に割り当てられた配列、すなわち、コンパイル時に配列のサイズと要素の値を決定します.
配列の形式を定義します.
一次元配列T arr[N];
Tは配列のデータ型であり、Nは配列の大きさであり、Nは定数値または定数式でなければならない.
動的に割り当てられた配列動的に割り当てられた配列とは、程度実行時にメモリが割り当てられ、コンパイル時にメモリが割り当てられない配列です.
C++には、メモリを割り当てて解放する2つの演算子が定義されています.newはメモリを割り当て、deleteはメモリを解放します.
newを使用してオブジェクトを動的に割り当てて初期化する
自由空間で割り当てられたメモリは無名であるため、newは割り当てられたオブジェクトの名前を付けることができず、そのオブジェクトへのポインタを返します.
新wは、基本的なデータ型変数を割り当てるか、クラスにオブジェクトのメモリ領域を割り当て、そのオブジェクトへのポインタを返すことができます.ダイナミックメモリをdeleteで解放newで割り当てたメモリは自分で解放されません.deleteで解放した後、メモリをシステムに返します.ダイナミックメモリの使用が完了したらdeleteでメモリを解放する必要があります.そうしないと、メモリの漏洩が発生します.
どうてきぶんぱいはいれつ
配列はよく知られていないので、指定したサイズの配列を簡単に定義できると信じています.多くのプログラムでは、配列を使用するシーンが発生しますが、プログラムの作成時にサイズが確定しないため、プログラムの実行時に知る必要があります.これには、動的配列を使用して、実行時に指定したサイズの配列を動的に割り当てる必要があります.
動的配列構文フォーマットをnewで割り当てます.
T *p = new T[n];
Tは、基本データ型であってもクラスであってもよく、new T[n]は、最初のT型要素を指すポインタを返す.