1

OOPプログラミング言語と手続き型言語とのメモリ利用の違いを理解したい。手続き型言語では、明示的なC mallocのようにヒープ使用量を定義する必要がありながら、オブジェクトが自動的にheapに格納されている、それは本当のことですOOP言語と手続き型言語とのメモリ使用量の相違点

  1. :具体的には、我々は例としてJavaC約話していると仮定しましょう?
  2. Cでプログラムを書くと、OSは、ヒープとスタックスペースを含むこのプログラムの仮想ページを作成します。私がコード内でmallocを使用しないと、これは私のプログラムが割り当てられたヒープを利用していないことを意味します。
  3. Stackはローカル変数と関数呼び出しアドレスを格納するために使用されるため、プログラムがスタック領域を使い果たした場合、OSはこのプログラムのページングサイズを拡張するか、単にヒープを拡張子として使用しますか?
+0

あなたはどの言語について話しているのですか? *すべての必須言語や*すべての*オブジェクト指向言語についての一般的な記述は困難です。たとえば、C++は上に述べたいくつかのステートメントに対する主要な反例です。 – EJoshuaS

+0

ありがとうございます。私は質問を更新しました – Kris

答えて

0

それは、手続き型言語では、明示的なCのmalloc関数のように、ヒープ使用量を定義する必要がありながら、オブジェクトは自動的にヒープに格納されているというのは本当でしょうか?

言語によって異なります。 Object Pascalのようなものでは、すべての "オブジェクト"をヒープ上に割り当てる必要があります。 C++などの他のものは、オブジェクトを静的、ヒープ、またはスタックに存在させることができます。両方のアプローチの利点と欠点があります。

私はCでプログラムを書くと、OSはヒープとスタックスペースを含むこのプログラムの仮想ページを作成します。私のコードでmallocを使用しない場合、これは私のプログラムが割り当てられたヒープを利用しないことを意味します、それは正しいですか?

おそらくそうではありません。実行時ライブラリが背中のヒープを使用する可能性があります。

スタックはローカル変数と関数呼び出しアドレスを格納するために使用されるため、OSがこのプログラムのページングサイズを拡張するか、ヒープを拡張機能として使用するか

オペレーティングシステムによって異なります。一般に、OSはできるだけスタックを拡張しようとします。スタックを拡張するためにヒープを使用しません。スタックは通常、どちらの端にもアクセスできないページ(nullポインタをキャッチする最初のページなど)によって保護されます。スタックを使い果たした可能性のある結果は、何らかの種類のアクセス違反です。

関連する問題