C言語における静的メモリ割り当てとは?仕組みとサンプルコードで徹底解説
C言語でプログラムが使用するメモリは、大きく分けて「静的メモリ割り当て」と「動的メモリ割り当て」の2つの方法で確保されます。
静的メモリ割り当て(Static Memory Allocation)とは
静的メモリ割り当てとは、変数のサイズがプログラムの実行前に決定され、固定サイズの領域として割り当てられる方式です。一度確保されたメモリは、明示的に解放することはできません。プログラム内で宣言された変数に対して、あらかじめメモリが割り当てられます。
静的メモリ割り当ての主な特徴
アドレス演算子「&」を使って変数のアドレスを取得し、ポインタに代入することができます。
メモリはコンパイル時に割り当てられます。
静的なメモリ管理にはスタック領域が使用されます。
一度割り当てられたメモリのサイズは、実行中に変更できません。
サイズが固定のため柔軟性に欠け、効率の面では動的割り当てに劣ります。
このように、変数の最終的なサイズがプログラムの実行前に決まる方式を「静的メモリ割り当て」と呼びます。「コンパイル時メモリ割り当て」と呼ばれることもあります。コンパイル時に確保された変数のサイズは、後から変更することができません。なお、動的メモリ割り当てではヒープ領域とmalloc関数などを使って実行時にサイズを調整できる点が大きな違いです。
例1:配列での静的メモリ割り当て
静的メモリ割り当ては、一般的に配列でよく使われます。次のサンプルコードでは、要素数5の整数型配列を宣言し、その要素を順番に表示しています。
#include <stdio.h>
int main(void) {
int a[5] = {10, 20, 30, 40, 50};
int i;
printf("配列の要素は以下の通りです\n");
for (i = 0; i < 5; i++)
printf("%d ", a[i]);
return 0;
}
実行結果
配列の要素は以下の通りです 10 20 30 40 50
例2:配列内の全要素の合計と積を計算する
続いて、配列内のすべての要素の合計値と積を計算する例を見てみましょう。
#include <stdio.h>
int main(void) {
/* 要素数5の配列を宣言(コンパイル時にメモリ確保) */
int array[5] = {10, 20, 30, 40, 50};
int i, sum = 0, product = 1;
/* forループで各要素を読み込み、合計と積を計算 */
for (i = 0; i < 5; i++) {
sum = sum + array[i];
product = product * array[i];
}
/* 結果を表示 */
printf("配列の要素の合計 : %d\n", sum);
printf("配列の要素の積 : %d\n", product);
return 0;
}
実行結果
配列の要素の合計 : 150 配列の要素の積 : 12000000
このように、配列のサイズを実行前に固定して宣言することで、コンパイル時に必要なメモリがまとめて確保されます。データのサイズが事前に分かっている場合には、シンプルで安全な静的メモリ割り当てが有効です。一方、サイズが実行時まで不明な場合は、malloc関数などを利用した動的メモリ割り当てを選択するとよいでしょう。
-
ネットワークセキュリティとは?意味・種類・重要性をわかりやすく解説
ネットワークセキュリティとは何かネットワークセキュリティとは、ネットワークそのもの、そこに保存されたデータ、そして接続された各種デバイスを、不正アクセスや悪用などの脅威から守るために設計されたあらゆる取り組みを指します。ハードウェアとソフトウェアの両方の技術が活用され、ウイルスやマルウェアといった有害なファイルがネットワークへ侵入するのを防ぎます。適切なネットワークセキュリティが導入されていれば、ネットワークへのアクセスを効果的に制御することが可能になります。ネットワークセキュリティの具体例身近な例として挙げられるのが「フィルタリング」です。ネットワークセキュリティでは、コンピュータネットワー
-
ネットワークのインターフェースとサービスとは?基本概念と種類をわかりやすく解説
ネットワークサービスとは 一般的にネットワークサービスとは、アプリケーション層以上で動作し、コンピュータネットワーク上で利用されるアプリケーションのことを指します。 ネットワークサービスは、データの保存(ストレージ)、操作(処理)、提示(プレゼンテーション)、通信といった機能を提供します。実装方式としては、クライアント・サーバ型アーキテクチャ、またはピアツーピア(P2P)型アーキテクチャが採用されます。 サービスインターフェースとは サービスインターフェースは、SOA(Service-Oriented Architecture:サービス指向アーキテクチャ)を実現するための仕組みです。これによ