Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

静的変数はC/C ++のどこに格納されていますか?


静的変数は、プログラムの実行中にメモリに残る変数です。つまり、静的変数の有効期間は、プログラムの実行全体です。これは自動変数とは異なり、関数が実行されているときにのみメモリに残り、関数が終了すると破棄されます。

静的変数は、メモリのデータセグメントに格納されます。データセグメントは、プログラムの仮想アドレス空間の一部です。

明示的な初期化がないか、ゼロに初期化されるすべての静的変数は、初期化されていないデータセグメント(BSSセグメントとも呼ばれます)に格納されます。これと比較して、初期化された静的変数は、初期化されたデータセグメントに格納されます。

この例を以下に示します-

static int x = 5;
static int y;

The static variable x is stored in the initialized data segment and the static variable y is stored in the BSS segment.

Cの静的変数を示すプログラムは次のとおりです-

#include<stdio.h>
int func(){
   static int i = 4 ;
   i++;
   return i;
}

int main(){
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());
   printf("%d\n", func());

   return 0;
}

上記のプログラムの出力は次のとおりです-

5
6
7
8
9
10

上記のプログラムを理解しましょう。

関数func()では、iは4に初期化される静的変数です。したがって、初期化されたデータセグメントに格納されます。次に、iがインクリメントされ、その値が返されます。これを示すコードスニペットは次のとおりです-

int func(){
   static int i = 4 ;
   i++;
   return i;
}

関数main()では、関数func()が6回呼び出され、出力されるiの値を返します。 iは静的変数であるため、プログラムの実行中はメモリに残り、一貫した値を提供します。これを示すコードスニペットは次のとおりです-

printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());
printf("%d\n", func());

  1. Microsoft Teams の記録はどこに保存されますか?

    在宅勤務の柔軟性やオフィスでのコミュニケーションのためのメッセージング アプリに対する圧倒的なニーズにより、多くのメッセージング アプリの人気が非常に高まっています。そのようなアプリの 1 つが Microsoft Teams です。最近、Microsoft Teams は、One Drive に保存された Teams の録画を自動的に削除する機能を導入しました。 Microsoft Teams の録画がどこに保存されているのか、Microsoft Teams から録画したビデオをダウンロードして共有する方法について疑問がある場合は、このガイドがまさにそれを行うのに役立ちます.さらに、最後まで

  2. Apple の写真はどこに保存されますか?

    Apple Photos が Mac のどこに写真を保存するのか疑問に思ったことはありませんか?これらの写真は、システム上の通常のファイルとしてはどこにも見つからないため、おそらく持っているでしょう。 写真アプリの写真に通常のファイルとしてアクセスできない理由は、それらがライブラリ ファイル内に保存されているためです。これらのファイルは通常のフォルダーのようには機能しないため、直接アクセスして写真を表示することはできません。 ただし、これらのライブラリのコンテンツにアクセスしたり、これらの Apple Photos ライブラリを外部ドライブなどの他の場所に移動したり、新しいライブラリを変