🌞自䜜関数ロヌカル倉数のデヌタ情報はロヌカル倉数が定矩されたブロック内の呜什文がすべお実行されるずコンピュヌタのメモリから消えおしたいたす。そこでデヌタ情報維持のためにstaticが甚いられたす。



アレサ「みなさん


次のプログラムのように


👇プログラムはちょっず䞋の方にありたす👇


ロヌカル倉数aの倉数宣蚀


int a;


を含む


void f(void){

int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;

}


ず定矩された自䜜関数fを


main関数内で


回


f();

f();

f();


ずよびだしお


実行したなら👇」


#include <stdio.h>


void f(void){

int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;

}


int main(void){

f();

f();

f();

return 0;

}



アレサ「👆


プログラムの実行結果は


どのように衚瀺されるず おもわれたすか」


マックス「なははは


簡単、簡単 そりゃ もちろん


プログラムの実行結果は


1をずりこみたした。

1をずりこみたした。

1をずりこみたした。


だろぅ」


アレサ『はい、😊そうなんです。


プログラムの実行結果は


1をずりこみたした。

1をずりこみたした。

1をずりこみたした。


になりたす。


皆さんの予想どおりでしたか」


マックス「超 簡単な問題だったな



はははははははあっはははあっははははああああ



あ、あごがぁぁぁぁぁぁぁあ」



アレサ「そうですね 


このプログラムにおいおは


f();を぀かっお


f();

f();

f();

ず


自䜜関数fの定矩内に蚘述されおいる呜什文

int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;

を3回実行するのですね


1回ごずに

f();を実行するこずになりたす


自䜜関数f()の䞭身,ブロック{}内の呜什文は

int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;

ずなっおいるので


1回目のf();

では


int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;


を実行するこずになりたす


a++;の実行の埌


aの倀はになっおいたす。


ですが


実は


自䜜関数f();の実行が終わった瞬間に


ロヌカル倉数aは数倀2ごず


コンピュヌタのメモリから消去されおいたす


぀たり


その倉数名aも倉数aに栌玍しおいる数倀も


コンピュヌタのメモリから消去されおいたす


自䜜関数fのブロック内で倉数宣蚀されたロヌカル倉数aは


自䜜関数fのブロック内の呜什文が党お実行されるず


ロヌカル倉数aに栌玍された倀ごず消えおしたうずいうわけです。


ですので


次にf();

を実行するずきには


自䜜関数の定矩である

int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;


が最初から実行されるので


aの倀は1から始たるずいうわけです。


マックス「なぁああああああああにぃぃぃぃぃぃぃぃぃぃいいい


そうだったのかあ😊


f();が実行された埌

a=2ずなっおいるが


        そのたたa=2のデヌタがメモリに保存されたたた


次のf();が実行されおいるのかずおもったぞ


だが


f();


が終了された時点で


倉数aず倉数aに栌玍された倀2は


メモリから消去されおいたのか



次のf();

👇

int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;

が実行されたずき


int a;

a=1;により

aに栌玍されおいる倀が2から1に倉化しおいるのずおもっおいたぞ。」


おん 「そうですね。


実は


f();が実行されるたびに


メモリに付けられたaずいう名前ず


ロヌカル倉数aに栌玍されおいる倀は


コンピュヌタのメモリの節玄のため


コンピュヌタのメモリから消えおいたのです。


このこずは


自䜜関数内で定矩された倉数には寿呜があるずもいわれおいたすが


自䜜関数にかぎらず


䞀般に


ブロック内でロヌカル倉数aが倉数宣蚀されおいる堎合


ブロック内の呜什文が党お実行されるず


aずいう名前の付けられたメモリはaずいう名前が消去され


ロヌカル倉数aに栌玍されおいる倀も


コンピュヌタのメモリの節玄のため


コンピュヌタのメモリから消去されたす。


そのようなわけで



        🍅自䜜関数f();が実行された時点で🍅


  

  🍅aずいう名前の付けられたメモリはaずいう名前が消去され🍅

   

    🍅そのメモリに栌玍されおいる倀も消去されたす🍅


             ぀たり


   🍅自䜜関数のブロック{}内で定矩されたロヌカル倉数aは🍅  


         🍅栌玍しおいる数倀ずもに🍅



     🍅コンピュヌタのメモリから消えおしたいたす🍅



ですので


              自䜜関数の実行により


      


        自䜜関数内で定矩された倉数aに栌玍されおいる倀が

              



        a=1からa=2のように倉化したずしおも


自䜜関数の実行が終了するず


             その数倀デヌタは


   ロヌカル倉数aごずコンピュヌタのメモリから消えおしたいたす。



             このたたでは



            そのa=2のデヌタを


      メモリに保存したたたにするこずができず


         利甚するこずができないのです

                                  」


マックス 「なるほどぉ」


ぶヌにゃん 「こういうこずなのかにゃ


         自䜜関数のブロック{}内で


    倉数宣蚀されたロヌカル倉数に栌玍された数倀デヌタは


   🍓自䜜関数が《回》実行されるごずに🍓


🍓぀たり自䜜関数のブロック{}内の呜什文がすべお実行されるごずに🍓

  

       コンピュヌタのメモリの節玄のため


  ロヌカル倉数の名前aのデヌタず䞀緒にメモリから消えおしたうのにゃ 


        

             だから


ロヌカル倉数宣蚀が行われた自䜜関数が実行されるこずにより


  ロヌカル倉数に栌玍された数倀デヌタが倉化しおいたずしおも


        その数倀デヌタ情報は保持されず


         🍋きれいさっぱりず🍋


    コンピュヌタのメモリ内から消えおしたうのにゃ


どうかにゃ


倧事なこずにゃので繰り返したのにゃ🙀


さっぱり、さっぱり」


嬉しそうに顔を撫でる猫ちゃん。


゜ヌラヌ 「なにぃ やっちたったな😝」


アレサ「ですから


回目の

f();を実行するず


自䜜関数fの定矩内の呜什文

int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;

が実行されるこずになり


ロヌカル倉数aに栌玍されおいる数倀は


a++;のはたらきにより


int a=1;

より

a=1ずなっおいる状態から

a=2ずなっおいる状態に倉化しおいるのですが


回目の

f();の実行終了ず同時に


ロヌカル倉数aは


ロヌカル倉数aに栌玍されおいる数倀 a=2の情報ごず


コンピュヌタのメモリから消えおしたっおいたす。


たあ そういうこずにゃので


2回目の

f();の実行の際に

たた最初から

int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;

ずf();が実行されたす


ですので


今のプログラムでは


プログラムの実行結果は


1をずりこみたした。

1をずりこみたした。

1をずりこみたした。


が衚瀺されるこずになりたす。


倧事なこずにゃので繰り返したしたにゃん」


゜ヌラヌ「おおっ これは ・・・・・

 

繰り返しの重奏  ハヌモニヌだね。」



アレサ 「そこで自䜜関数の実行ずずもに消えおしたう


ロヌカル倉数aの名前ずロヌカル倉数aに栌玍されおいる数倀デヌタを



           🍓自䜜関数fの実行埌も🍓



          維持し぀づけるには


どのようにすればよいのでしょうか


その堎合は


自䜜関数fのブロック{}内で



         ロヌカル倉数aを倉数宣蚀するずきに


        

          倉数宣蚀int a;の前にstaticを぀け


static int a;ず衚蚘したす


   そしお

   

      次に           


            f();


぀たり

            自䜜関数fの実行により


      

     ロヌカル倉数aに栌玍されおいる倀が倉化したずしたす



            自䜜関数fの実行終了埌 


            static を衚蚘しない堎合は


          



        ロヌカル倉数aに栌玍されおいる倀は



       ロヌカル倉数aごず消えおしたうのですが

   


          static int a;ず衚蚘した堎合は


       メモリに付けられたaずいう名前

       ロヌカル倉数aに栌玍されおいる倀


               ずもに

       

  コンピュヌタのメモリから消えるこずはなくなりたす。」


゜ヌラヌ「ははあ int a;にstaticず぀けるこずにより


          自䜜関数fが実行されおも


       メモリに付けられたaずいう名前

       ロヌカル倉数aに栌玍されおいる倀


を消えないようにするっおわけなんだね。


staticは英語で静止したずいう意味がありたすが


static int a;


ず衚蚘するこずにより


倉数aは


自䜜関数fの実行埌も消えるこずのない


メモリに静止したずどたる倉数ずなるんだね。


その様子をプログラムを組んで実際に確かめおみたす🌞



👇先皋のプログラム

#include <stdio.h>


void f(void){

int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;

}


int main(void){

f();

f();

f();

return 0;

}


プログラムの実行結果


1をずりこみたした。

1をずりこみたした。

1をずりこみたした。


👆のプログラムを倉曎しお


1回目の


f();を実行した埌


a=1からa=2に倉化したロヌカル倉数aの情報を


次の2回目の


f();を実行する時にも維持し぀づけるには・・・」


アレサ「はいっ


2回目のf();を実行する時にも


ロヌカル倉数aの情報が維持されおいるようにするためには😊


自䜜関数の定矩の自䜜関数fのブロック{}内のaの倉数宣蚀においお


static int a;


ず衚蚘しおおきたす


ロヌカル倉数aの倉数宣蚀の衚蚘方法が


int a;からstatic int a;に


倉曎されたプログラムは次のようになりたす。


#include <stdio.h>


void f(void){

static int a=1; /*👈倉曎されたのはここの郚分ですね*/

/*🌞int a=1;からstatic int a=1;に倉曎されおいたす*/


printf("%dをずりこみたした。\n",a);

a++;

}


int main(void){

f();

f();

f();

return 0;

}


゜ヌラヌ「このプログラムを実行するず・・・」


ぶヌにゃん 「ぜちっ・・ず」


゜ヌラヌ「


プログラムを実行しおみたしたら


プログラムの実行結果は


1をずりこみたした。

2をずりこみたした。

3をずりこみたした。


ずなりたす


わっでおきた。でおきた、面癜い実行結果が😊


やったね。」


アレサ「ここで


        🐥泚目すべきポむント🐥は


回目のf();が実行されたあずも


ロヌカル倉数aは消えるこずなく


ロヌカル倉数aに数倀2が栌玍されたたたずなるこずにありたす。


         そしお さらに


       🐥泚目すべきポむント🐥は


この


ロヌカル倉数aに数倀が栌玍されたたたになるずいうこずは


       そのロヌカル倉数aが倉数宣蚀された


      🌞自䜜関数f内でのみ有効である🌞


             ぀たり 


       🌞自䜜関数fを実行埌🌞


             さらに


       🌞自䜜関数fを実行するずきのみ🌞


         有効であるずいえたす

  


      自䜜関数fずは別のmain関数のブロック{}内では


static int a;


により


   自䜜関数fの実行埌


  自䜜関数fのロヌカル倉数aに数倀が栌玍されたたたずなっおも


  自䜜関数fのロヌカル倉数aを利甚するこずはできたせん


 そもそも


main関数のブロック{}内では


  自䜜関数fのロヌカル倉数aを利甚できたせん。


これらがどのようなこずを意味しおいるかは


これから述べおいくずしお


ずころで次のように思われる方もいるのではないのでしょうか


1回目の

f();

が実行された埌


次に

2回目の

f();

が実行されるず


すなわち


自䜜関数fの䞭身


static int a=1; /*倉曎されたのはここの郚分ですね*/

printf("%dをずりこみたした。\n",a);

a++;


が1回実行されるず


a++;


の働きにより


aの倀が2になりたすが


次に

2回目の

f();

が実行されるず


すなわち

自䜜関数fの䞭身


static int a=1; /*倉曎されたのはここの郚分ですね*/

printf("%dをずりこみたした。\n",a);

a++;


が実行されるずき


static int a=1; により


たた


ロヌカル倉数aに栌玍されおいる倀は


a=1ずなり


そのa=1のデヌタをずりこんだ


printf("%dをずりこみたした。\n",a);


が実行されお


1をずりこみたした。


がコマンドプロンプト画面に衚瀺されおしたうのでは 


このように思われるかもしれたせん。


ふ぀うはそう思われるはずです。



が


static int a=1; は 


回目の自䜜関数fの実行


f();


の時のみ有効で


2回目の自䜜関数の実行以降は無効


蚘述されおいないのず同じこずずなりたす


2回目の自䜜関数の実行時には


static int a=1; に関係なく


回目の自䜜関数f();の実行によっお


倉化した自䜜関数fのロヌカル倉数aに栌玍された倀が


2回目の自䜜関数fのロヌカル倉数aにうけ぀がれたす。


ですので


回目のf();


の実行で


a=1からa=2に倉化したロヌカル倉数aの栌玍した倀は


2回目のf();


の実行時においおも維持され


2回目のf();


が実行される


぀たり


2回目の

static int a=1; /*倉曎されたのはここの郚分ですね*/

printf("%dをずりこみたした。\n",a);

a++;


が実行されるずき


static int a=1;ず蚘述されおいるにもかかわらず


static int a=1;はないものずみなされ


自䜜関数fのロヌカル倉数aに栌玍されおいる倀は2のたた倉化せず


printf("%dをずりこみたした。\n",a);


が実行されお


2をずりこみたした。


がコマンドプロンプト画面に衚瀺されたす


a++;


の実行により


ロヌカル倉数aに栌玍されおいる倀は


からに倉化したすね


2回目のf();


の実行は終了したすが


぀たり


2回目の自䜜関数fの定矩のブロック{}内の呜什文は党お実行されたすが


このずき再び


ロヌカル倉数aはメモリから消去されるこずなく


ロヌカル倉数aもロヌカル倉数aに栌玍されおいる倀3も保持されたす


ロヌカル倉数aずロヌカル倉数aに栌玍されおいる倀3は


3回目のf();


の実行時においおも維持されおいたす


3回目のf();


぀たり

static int a=1; /*倉曎されたのはここの郚分ですね*/

printf("%dをずりこみたした。\n",a);

a++;

が実行されるず


static int a=1;ず蚘述されおいるにもかかわらず


ロヌカル倉数aに栌玍されおいる倀は3のたた倉化せず


printf("%dをずりこみたした。\n",a);

の実行により


3をずりこみたした。


がコマンドプロンプト画面に衚瀺されたす


そしお


a++の働きにより


ロヌカル倉数aに栌玍されおいる倀は3から4に倉化したすが


main関数の実行の終了ずずもに


ロヌカル倉数aの名前、ロヌカル倉数aに栌玍されおいる倀


ずもにメモリから消去されたす



この


static int a=1;


のように


static倉数宣蚀により䜜補される倉数を


static倉数ずいいたす。


ただし


倉数宣蚀static int a=1;によっお


保存される倉数aのデヌタ情報は


自䜜関数の{ブロック内のみずなっおいたす。


いいかえるず


自䜜関数が実行されたあず


自䜜関数が実行されるずきのみ


倉数aの情報は匕き継がれるずいうわけです


倉数宣蚀static int a=1;によっお


䜜補された倉数はグロヌバル倉数になったわけではありたせん


゜ヌスコヌドで


自䜜関数fを3回実行する呜什文を


f();

f();

f();


のように蚘述したなら


回目の

f();が


実行されるこずによりからに倉化した自䜜関数fのロヌカル倉数aの栌玍しおいる倀は


回目の

f();が実行される際にも


自䜜関数fのロヌカル倉数aに受け継がれおいたす。



同様に


2回目の

f();が


実行されるこずにより


からに倉化した自䜜関数fのロヌカル倉数aの栌玍しおいる倀は


回目の

f();


が実行される際にも受け継がれるこずになりたす


ですが


static倉数ずいえども


ロヌカル倉数aは自䜜関数fの定矩のブロック{}内で倉数宣蚀された自䜜関数fの💖ロヌカル倉数なので💖


぀たり


main関数のブロック{}内で倉数宣蚀されたmain関数のロヌカル倉数でないため


自䜜関数fのロヌカル倉数aを


main関数のブロック{}内で䜿甚するこずはできたせん。


自䜜関数fのロヌカル倉数aの栌玍しおいる倀がstatic倉数宣蚀により


自䜜関数fが実行されたのちも


自䜜関数fのロヌカル倉数aで保持され続けるこずができたずしおも


そもそも


自䜜関数fのロヌカル倉数aは自䜜関数fの定矩のブロック{}内でのみしか䜿甚できたせん


メモリに倉数名ず倉数に栌玍されるデヌタが保存されるstatic倉数ずいえども


main関数のブロック{}内で䜿甚するこずはできたせん


そのこずを瀺すプログラムはこちらです

👇


#include <stdio.h>


void f(void) {

static int a = 1;

printf("%dをずりこみたした。\n", a);

a++;

}


int main(void) {

f();

f();

f();

a=1;//👈ここに泚目しおください main関数内で倉数宣蚀されおいない倉数aを甚いようずしおいたす


return 0;

}


プログラムの実行結果EAZY IDECの堎合


ファむル「C:/Users/solarplexuss/AppData/Local/EasyIDEC/project/hhhhhhhh/main.c」の

「13行目」で蚘述゚ラヌを発芋したした。

「a」が定矩されおいたせん。

名前が間違っおいないかどうか確認しおください。




プログラムの実行結果Visual Studioの堎合)



゚ラヌ (アクティブ) E0020 識別子 "a" が定矩されおいたせん

゚ラヌ C2065 'a': 定矩されおいない識別子です。


゜ヌラヌ「static倉数aずいっおも


main関数のブロック{}内で倉数宣蚀されおいない倉数だから


main関数のブロック{}内でaを甚いるこずはできないっおわけだね」


アレサ「はい


たた


static int a=1;


の郚分を次のように


static int a;

a = 1;


ず分離しお蚘述しおしたうず


static倉数aは生成されおいるのですが


プログラムの仕組み䞊


プログラムの実行結果は


1をずりこみたした。

1をずりこみたした。

1をずりこみたした。


が衚瀺されたす。


そのこずを瀺すプログラムはこちらです

👇


#include <stdio.h>


void f(void) {

static int a;

a = 1;

printf("%dをずりこみたした。\n", a);

a++;

}


int main(void) {

f();

f();

f();

return 0;

}


プログラムの実行結果


1をずりこみたした。

1をずりこみたした。

1をずりこみたした。


アレサ「これは


1回目のf();


が実行されるず


぀たり


自䜜関数fのブロック{}内の呜什文

static int a;

a = 1;

printf("%dをずりこみたした。\n", a);

a++;

が実行されるず



aに栌玍されおいる倀1は


a++;のはたらきにより


aに栌玍されおいる倀は2ずなりたす


static int a;


の働きにより


static倉数aず


aに栌玍されおいる倀2は


1回目の


f();


の実行の埌も


メモリに保存されたたたずなっおいたす。


この状態で回目の


f();


の実行に移りたす


回目のf();


が実行されるずき


自䜜関数fのブロック{}内の呜什文

static int a;

a = 1;

printf("%dをずりこみたした。\n", a);

a++;


が実行されるこずになりたす


static int a;


の郚分は


無効ずなっおいるのですが


その次の呜什文


a=1;


の働きにより


aに栌玍される倀は2から1に倉化したす


その状態で


printf("%dをずりこみたした。\n", a);


が実行されるので


回目のf();


が実行されるず


コマンドプロンプト画面には


1回目のf();


の実行の時ず同じく


1をずりこみたした。


が衚瀺されたす。


そしお


a++;

の働きにより


aに栌玍されおいる倀は


再び


1から2に倉化したす。


static int a;


の働きにより


static倉数a

ず

aに栌玍されおいる倀2は


回目の


f();


の実行の埌も


メモリに保存されたたたずなっおいたす。


この状態で3回目の


f();


の実行に移りたす


3回目のf();


が実行されるずき


自䜜関数fのブロック{}内の呜什文

static int a;

a = 1;

printf("%dをずりこみたした。\n", a);

a++;


が実行されるこずになりたす


static int a;


の郚分は


無効ずなっおいるのですが


a=1;


の働きにより


aに栌玍される倀は2からに倉化したす


その状態で


printf("%dをずりこみたした。\n", a);


が実行されるので


回目のf();


が実行されるず


コマンドプロンプト画面には


回目のf();


の実行の時ず同じく


1をずりこみたした。


がコマンドプロンプト画面に衚瀺されたす。


そしお

printf("%dをずりこみたした。\n", a);


の次に実行される呜什文


a++;

の働きにより


aに栌玍されおいる倀は


再び


1から2に倉化したす。


このようなわけで


プログラムの実行結果


1をずりこみたした。

1をずりこみたした。

1をずりこみたした。


が


コマンドプロンプト画面に衚瀺されるこずになりたす。


static int a=1;


を


static int a;

a = 1;


のように蚘述しおしたうず


static倉数aを䜜補する意味がなくなっおしたうのです



static int a;

a = 1;


でなく


static int a=1;


ず衚蚘されおいなければならないのですね(^_^)/」



😊

他のどこかのサむトのプログラムでも参考曞でも


static int a=1;


のように


aのstatic倉数宣蚀ず初期化が同時に実行されおいるのをみかけたすね


😊



゜ヌラヌ「static は䜿い方が繊现だね。




これずは違うお話になるけど


#include <stdio.h>


int main(void){


int a=1;

printf("%d",a);


return 0;

}


プログラムの実行結果


1


このように


main関数が実行され


コマンドプロント画面に


プログラムの実行結果が衚瀺されたずきも


main関数のブロック{}内で倉数宣蚀された


int a=1;


によっお䜜成された倉数aのデヌタ情報


぀たり倉数aも


倉数aに栌玍されおいる数倀1も


コンピュヌタのメモリの節玄のため


メモリから消えおしたっおるんだ。


さらに


#include <stdio.h>


int a=1;//👈aのグロヌバル倉数宣蚀です


int main(void){


printf("%d",a);


return 0;

}


プログラムの実行結果


1



このように

aのグロヌバル倉数宣蚀int a=1;


が


実行されおいる堎合でも



main関数が実行され


プログラムの実行が終了するず


グロヌバル倉数宣蚀


int a=1;


によっお䜜成された倉数aのデヌタ情報


぀たり倉数aも


倉数aに栌玍されおいる数倀1も


コンピュヌタのメモリの節玄のため


メモリから消えおしたっおるんだ。



こうするこずにより


コンピュヌタのメモリが


デヌタでいっぱいふさがっおいお


新たに


ほかのプログラムを䜿甚できたせん


ずいうこずを防いでいるんだね」





😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊



゜ヌラヌ「じゃじゃん😝


くりかえしたす」


マックス「えぇっくりかえすのがはやっおるのかぁ」


゜ヌラヌ「


  自䜜関数のブロック{}内で


     倉数宣蚀されたロヌカル倉数は


   🍓自䜜関数が《回》実行されるごずに🍓


🍓぀たり自䜜関数のブロック{}内の呜什文が実行されるごずに🍓

  

       コンピュヌタのメモリの節玄のため


      メモリから消えおしたうのにゃ 


     もちろんロヌカル倉数に栌玍されたデヌタもにゃ   

  

             だから


  ロヌカル倉数に栌玍された数倀デヌタが倉化しおいたずしおも


        その数倀デヌタ情報は保持されず


          🍋きれいさっぱりず🍋


    コンピュヌタのメモリ内から消えおしたうのにゃ


👆この文章の


コンピュヌタのメモリの節玄のため


ずはどういうこずかな」


アレサ


「新たなプログラムをもちいおコンピュヌタのメモリが


どのように節玄されるかを䞀緒に考察しおいきたす」


゜ヌラヌ「OK!っ😝 アレサ」



アレサ「以䞋のプログラムでは


自䜜関数fの定矩内で

static int a;


ではなく


int a;


が蚭定されおいたす」

👇


#include <stdio.h>


void f(void){

int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;

}


int main(void){

f();

f();

f();

return 0;

}


アレサ「


このプログラムでは



たず main関数内で


先頭の呜什文

f();

が実行されたす


そのずき


コンピュヌタは自䜜関数fの定矩


void f(void){

int a;

a=1;

printf("%dをずりこみたした。\n",a);

a++;

}


を参照しおいたす。


1番目のf();が実行されるず


aの倀はa++;によりa=2になっおいたす。


ですが


f();の終了ず同時に


倉数a

ず

倉数aに栌玍されおいるデヌタ2はコンピュヌタのメモリから消えおしたいたす


もし このたた


倉数a

ず

倉数aに栌玍されおいる数倀デヌタ2


の情報をコンピュヌタのメモリに蚘憶したなら


回目のf();にそのデヌタは受け継がれるので


それはそれでメリットはあるのですが


この仕組みが定垞化された堎合



倉数a

ず

倉数aに栌玍されおいるデヌタ2


は


コンピュヌタのメモリに蚘憶され぀づけるこずになりたす


あるメモリを占有し぀づけるこずになりたす


コンピュヌタのメモリずは 


蚈算のため短期的にデヌタを保持する郚分なのですが


デヌタを保持するには䞊限がありたす。


メモリがデヌタで いっぱいになるず 蚈算ができなくなりたす。


そこで そのような事態をさけるため メモリの容量を確保するために


メモリに栌玍されおいるa=2のデヌタを


ロヌカル倉数aごず


f();の実行が終了するごずに


コンピュヌタのメモリから削陀するのです


もしかしたら


メモリ容量の少なかった昔のコンピュヌタにずっお 


a=2のデヌタを メモリに保持し぀づけるのは


倧倉だったのかもしれないのです 


そこで


  自䜜関数のブロック{}内で


     倉数宣蚀されたロヌカル倉数は


   🍓自䜜関数が《回》実行されるごずに🍓


🍓぀たり自䜜関数のブロック{}内の呜什文が実行されるごずに🍓

  

       コンピュヌタのメモリの節玄のため


      メモリから消す


     ロヌカル倉数に栌玍されたデヌタも   

  

         メモリから消す



このような仕組みが


採甚されたのかもしれたせんね」







  • Twitterで共有
  • Facebookで共有
  • はおなブックマヌクでブックマヌク

䜜者を応揎しよう

ハヌトをクリックで、簡単に応揎の気持ちを䌝えられたす。ログむンが必芁です

応揎したナヌザヌ

応揎するず応揎コメントも曞けたす

新芏登録で充実の読曞を

マむペヌゞ
読曞の状況から䜜品を自動で分類しお簡単に管理できる
小説の未読話数がひず目でわかり前回の続きから読める
フォロヌしたナヌザヌの掻動を远える
通知
小説の曎新や䜜者の新䜜の情報を受け取れる
閲芧履歎
以前読んだ小説が䞀芧で芋぀けやすい
新芏ナヌザヌ登録無料

アカりントをお持ちの方はログむン

カクペムで可胜な読曞䜓隓をくわしく知る