他のデータ構造と同様に、スタックはLIFO(後入れ先出し)原理に従うデータ構造です。あなたの質問に記載されているように、LIFO原理に従ってデータを入力して取り出すためのプッシュ/ポップ操作を行います。
すべてのプロセスが
テキストを実行している場合の処理 にアクセス されたアドレス空間の基本的に4つの部分から成り - この部分は を実行する実際のM/C命令を含みます。多くのオペレーティングシステムでは、これは読み取り専用に設定されているため、 プロセスは命令を変更できません。これにより、プログラムの複数のインスタンス がテキストの単一のコピーを共有することができます。
データ - この部分には、プログラムのデータ部分が含まれます。これは、初期化読み取り専用データ)
1分け をfurthere - これはプログラムによって初期化されており、それらは唯一のプロセスの 実行時に読み込まれるデータ要素 が含まれています。
2)初期化された読み取り書き込みデータ - これは、プログラムによって初期化された データ要素を含み、 プロセス実行中に変更されます。
3)未初期化データ - この要素には、プログラムによって初期化された が含まれておらず、プロセスが実行される前に0に設定されています。 これらは、BSS(Block Started Symbol)と変更して参照することもできます。このような要素の advは、この領域のプログラムファイルに のスペースを割り当てる必要はありません。つまり、 プロセスが実行される前に、OSによって0に初期化されます。
スタック - この部分は、ローカル変数のために使用され、フレーム
ヒープスタック - この部分は動的に割り当てられたメモリが含まれてい
int abc = 1; ----> Initialized Read-Write Data
char *str; ----> BSS
const int i = 10; -----> Initialized Read-Only Data
main()
{
int ii,a=1,b=2,c; -----> Local Variables on
Stack
char *ptr;
ptr = malloc(4); ------> Allocated Memory in Heap
c= a+b; ------> Text
}
データ、ストアデータ テキスト、店舗コードがあり
リンカによって生成されたファイルの3つの(メイン?)セグメント/セクションです。テキスト - プログラムテキスト(そして明らかにconst char配列、おそらく他の 'const'配列は変更できません)。私は配列の部分について100%確信していません、おそらく 誰かが私を修正します。
データで初期化されたグローバルデータ。以下の例を参照してください。 bss - 初期化されていないグローバルデータ。ここで は、いくつかの例
int x = 1; /* goes into data */
int y; /* goes into bss */
const int z = 1;
これは、我々はとにかく変更することはできませんが、シンボル
によって開始
const char array[] = {'a','b'....etc}
/* the rest goes into text */
int main(void)
{
return EXIT_SUCCESS;
}
ブロックを保護することができるので、「テキスト」に行く見てきました
(BSS)Unixリンカによって生成された初期化されていないデータセグメント。他のセグメントは、プログラムコードを含む「テキスト」セグメントであり、「データ」セグメントは、 の初期化データを含む。 bssセグメントのオブジェクトには名前とサイズのみがあり、値はありません。
または 'std :: stack'自体。 – GManNickG