ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript におけるスタックとヒープについて理解する。

JavaScript におけるスタックとヒープについて理解する。

DDD
DDDオリジナル
2024-10-14 06:19:29932ブラウズ

Understanding Stack and Heap in JavaScript .

JavaScript では、スタックとヒープはデータ管理に使用される 2 種類のメモリであり、それぞれ明確な目的があります。

  1. スタック
  2. ヒープ

*スタックとヒープとは *
スタック : スタックは、主にプリミティブ型と関数呼び出しを保存するために、静的メモリ割り当てに使用されます。シンプルな後入れ先出し (LIFO) 構造なので、アクセスが非常に高速です。

ヒープ: ヒープは動的メモリ割り当てに使用され、オブジェクトと配列 (非プリミティブ型) が保存されます。スタックとは異なり、ヒープは柔軟なメモリ割り当てが可能であるため、より複雑でアクセスが遅くなります。

スタックメモリの例:

let myName = "Amardeep"; //primitive type stored in stack 
let nickname = myName; // A copy of the value is created in the Stack 
nickname = "Rishu"; // Now changing the copy does not affect the original value .
console.log(myName); // output => Amardeep (Original values remains unchanged since we are using stack)
console.log(nickname); // output => rishu (only the copied value will changed)

この例では:

  • myName はプリミティブ型としてスタックに保存されます。
  • ニックネームに myName の値が割り当てられると、その値のコピーが Stack に作成されます。
  • ニックネームを変更しても、 myName はメモリ内の独立したコピーであるため、影響を受けません。

ヒープメモリの例
次に、非プリミティブ データ型 (オブジェクト) が Heap 内でどのように管理されるかを確認してみましょう。

let userOne = {         // The reference to this object is stored in the Stack.
    email: "user@google.com",
    upi: "user@ybl"
};                      // The actual object data is stored in the Heap.

let userTwo = userOne;  // userTwo references the same object in the Heap.

userTwo.email = "amar@google.com"; // Modifying userTwo also affects userOne.

console.log(userOne.email); // Output: amar@google.com
console.log(userTwo.email); // Output: amar@google.com

この例では:

  • userOne は、ヒープに格納されているオブジェクトへの参照を保持します。 -userTwo には同じ参照が割り当てられます。つまり、userOne と userTwo の両方がヒープ内の同じオブジェクトを指します。 - userTwo.email を変更すると、userOne.email に直接影響します。これは、両方の参照がメモリ内の同じ場所を指しているためです。

重要なポイント
*スタック メモリ * は、プリミティブ型と関数呼び出しを保存するために使用されます。値を割り当てるたびに、新しいコピーがスタックに作成されます。
*ヒープ メモリ * はオブジェクトと配列の保存に使用されます。同じオブジェクトを参照する変数はメモリ内の同じメモリ位置を共有するため、1 つの変数を変更すると他の変数に影響します。

以上がJavaScript におけるスタックとヒープについて理解する。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。