私はこの記事を読んでいて、これを見ました:「この記事は、少なくとも基本的にGNU/Linuxシステムのメモリマップがどのように機能するか、特にスタックに静的に割り当てられたメモリと動的に割り当てられたメモリの違いをすでに知っていて理解していることを前提としています。ヒープ。"
スタックとヒープは動的に割り当てられる、つまり必要な場合にのみ割り当てられ、グローバル変数と関数内で「静的」として宣言された変数は静的に割り当てられる、つまり常に割り当てられると思っていたので、これは私を混乱させました。
たとえば、私が持っている場合
void f() {
int x = 1;
...
}
値 1 のみがスタックに置かれ、関数 f() が呼び出された場合にのみスタック ポインターがインクリメントされます。同様に、私が持っている場合
void f() {
int x = malloc(1 * sizeof(int));
...
}
そのヒープメモリは、f() が呼び出された場合にのみ割り当てられます。ただし、「int x = 1;」がある場合 プログラムのグローバル セクションまたは「static int x = 1;」関数本体内では、このプログラムを実行するたびに、そのメモリが値 1 のデータ セクションに割り当てられます。
私はこれについて間違っていますか?