C言語入門(10) 配列はなぜ固定サイズ?

Posted: 2012年06月25日

「C言語入門(9) 配列って?」では特に記述しませんでしたが
配列は、固定サイズしかありません。

 int aryTemp[5];
 // int aryTemp2[sizeof(aryTemp)]; ERROR
 // sizeofはサイズ取得関数

他の言語では、配列のサイズが固定ではない場合もあります。
C言語では、なぜ配列サイズが固定なのか(”ここからは、私自身が勝手に思っていることで間違えている可能性があります。”)
機械語に近い言語のため、処理スピードを考えてかつ、メモリーを使いすぎないようにしたためだと思われます。

処理スピード

固定長の配列のみしか作成できなければ、実行されるたびに領域を確保するのではなく
起動時に領域を確保することもできます。(実際はどのようになっているか把握していません)

メモリー

変数がメモリーに確保される場合は、「スタック」と言った領域に確保されます。
他の領域には、「コード」「データ」「ヒープ」が存在しています。
動的に領域を確保する場合には、「ヒープ」を使用します。
サイズが決まっていない、データは、「ヒープ」を用いることで「スタック」のメモリーを削減しようと考えたかと思います。

C言語には、固定長と、可変長の配列が存在しています。
そのため、実際には、ほとんど可変長配列を使用することになります。
可変長配列は、固定長と異なり、領域を確保し、解放する処理をプログラマーが意識する必要があります。
この処理には以下の障害が伴うため、注意が必要です。

  • 解放を忘れれば メモリーリーク(メモリーの無駄遣い)
  • 何度も解放をすれば メモリーデータの破壊(解放対象ではないデータを解放してしまう)

注意が必要と記述しましたが、これを守っているソフトウェアはそんなにありません。
そのため、この処理をコンピュータが行う言語「Java等」が作成されました。

C言語で書く場合は、忘れてはいけないことです。
可変長配列は、メモリーに関わってくる話のため
ここでは解説せずにのちのち解説をしていきたいと思います。

カテゴリー: プログラム, 入門 | タグ: , | コメント無し »

コメント