問題タブ [stack-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - スタックはアセンブリ言語でどのように機能しますか?
私は現在、スタックがどのように機能するかを理解しようとしているので、アセンブリ言語を独学することにしました。この本を使用しています:
http://savannah.nongnu.org/projects/pgubook/
私はGasを使用しており、 Linux Mintで開発を行っています。
私は何かに少し混乱しています:
私の知る限り、スタックは単なるデータ構造です。したがって、アセンブリでコーディングしている場合は、自分でスタックを実装する必要があると思いました。ただし、次のようなコマンドがあるため、これは当てはまらないようです
では、 x86アーキテクチャのアセンブリでコーディングし、Gas 構文を使用する場合: スタックは、既に実装されている単なるデータ構造なのでしょうか? それとも、実際にハードウェア レベルで実装されているのでしょうか。それとも別のものですか?また、他のチップ セットのほとんどのアセンブリ言語には、スタックが既に実装されていますか?
これが少しばかげた質問であることはわかっていますが、実際にはかなり混乱しています。
c++ - glibcの文字列実装を使用してスタックにstd::stringを割り当てるにはどうすればよいですか?
私の理解では、上記のコードはデフォルトのアロケータを使用してnewを呼び出します。したがって、std :: string fooがスタックに割り当てられていても、foo内の内部バッファーはヒープに割り当てられます。
スタックに完全に割り当てられる文字列を作成するにはどうすればよいですか?
java - スタックまたはヒープのどこに変数参照が割り当てられていますか?
質問があります
たとえば、メソッド内で変数を宣言するとどうなりますか。
myShip 参照は、スタックまたはヒープのどこに割り当てられますか?
私はスタックで考えていますが、J2MEゲームプログラミングの本「JavaクラスはJavaヒープにインスタンス化されています」を読んでいたので混乱しています
すべての Java クラス ?
前もって感謝します
c - スタックまたはヒープ上にありますか?
パズルのような C コードがいくつかあります。このコードを使用する理由として、struct
オブジェクトがヒープまたはスタックで終了しているかどうかをどのように判断できるか疑問に思っています。
オブジェクトはまたはで作成されていません。彼らは配列の形で人生を始めます。この記事では、構造体 Emp を呼び出します。malloc
calloc
オブジェクトはさまざまな方法でソートおよび操作され、ある時点でオブジェクトがコピーされ、配列ポインターに渡されます。コピーは を介して行われmemcpy
ます。次に、オブジェクトは次のように配置されますEmp* emps_a[6]
。
オブジェクトはコピーから取得され、上記の emps_a に割り当てられます。
これの一部または一部が私の質問に関係しているかどうかはわかりません。私は free() を必要としたり、メモリをクリーンアップしたりする必要はありません... 残念ながら、私は C についてあまり知りません。
助けていただければ幸いです。
c++ - C++ のすべてにポインターを使用しないのはなぜですか?
いくつかのクラスを定義するとします。
次に、それを使用していくつかのコードを記述します。なぜ私は次のことをするのですか?
Java の世界から来て、私はいつも次のように書いています。
彼らは基本的に同じことをしますよね?1 つはスタック上にあり、もう 1 つはヒープ上にあるため、後で削除する必要があります。両者の間に根本的な違いはありますか?どちらかを優先する必要があるのはなぜですか?
java - Javaオブジェクトメソッドスタックフレームパラメータ
したがって、Javaでは、クラス「Foo」に非静的メソッド「bar()」があるとします。
次に、このメソッドを次のように呼び出すとします。
これで、呼び出しのスタックフレームには、整数パラメーターと、オブジェクトへの内部参照として使用される「this」パラメーターが含まれます。
'this'とメソッドパラメータに加えて、他にどのような興味深いパラメータが新しいスタックフレームにコピーされますか?
。
linux - Linuxでclone()システムコールのスタックをmmapする方法は?
Linux の clone() システム コールは、新しく作成されたスレッドが使用するスタックを指すパラメータを取ります。これを行う明白な方法は、単純にいくつかのスペースを malloc して渡すことですが、そのスレッドがこれまでに使用する (予測するのが難しい) ほど多くのスタックスペースを malloc したことを確認する必要があります。
pthreads を使用するときはこれを行う必要がなかったことを思い出したので、代わりに何をするのか興味がありました。このサイトに出くわしました。「Linux pthreads 実装で使用される最善の解決策は、mmap を使用してメモリを割り当てることです。フラグは、使用時に割り当てられるメモリの領域を指定します。この方法では、メモリが割り当てられます。システムが追加のメモリを割り当てることができない場合、セグメンテーション違反が発生します。」
mmap が使用されているのを聞いたことがある唯一のコンテキストは、ファイルをメモリにマッピングするためのものであり、実際に mmap のマニュアルページを読むにはファイル記述子が必要です。clone() に与える動的な長さのスタックを割り当てるために、これをどのように使用できますか? そのサイトはただのクレイジーですか?;)
どちらの場合でも、カーネルは、ユーザーが新しいプロセスを起動するときに常に実行しなければならないことなので、新しいスタック用の空きメモリの束を見つける方法を知る必要はありませんか? カーネルがすでにこれを把握できるのに、そもそもスタック ポインターを指定する必要があるのはなぜですか?
heap-memory - ヒープおよびスタック領域の初期化されていない値
ヒープ領域が常にゼロに設定されるのはなぜですか?? 同様にスタックスペースがゼロに設定されないのはなぜですか??
c# - 配列、ヒープ、スタック、および値の型
上記のコードでは、new int [100]はヒープ上に配列を生成していますか?私がCLRでc#を介して読んだことから、答えはイエスです。しかし、私が理解できないのは、配列内の実際のintがどうなるかということです。これらは値型であるため、ボックス化する必要があると思います。たとえば、myIntegersをプログラムの他の部分に渡すと、スタックが常に残っているとスタックが乱雑になります。 。それとも私は間違っていますか?それらはボックス化されただけで、アレイが存在する限りヒープ上に存在すると思います。
java - メソッドはどこにありますか? スタックまたはヒープ?
メソッドのローカル変数とパラメーターがスタックに存在することは知っていますが、Java の場合、メソッドが実際にどこに存在するかわかりませんか?
次のようなスレッドオブジェクトを宣言すると:
したがって、メイン メソッドとは別にメソッドの呼び出しを個別に作成したことを意味します。どういう意味ですか?スタックメモリを介してメソッドの個別のシーケンスを呼び出すことを意味しますか? 私は正しいですか?