「組み込み」ならではの基礎知識 ――スタートアップ・ルーチンからハードウェアまで

セサミアン3人組

tag: 組み込み

技術解説 2003年5月14日

●プログラムはコード部と変数部に分けて格納される

 プログラムがコンパイルされると,プログラムの基本となる制御部分はコードと呼ばれる機械語に変換されます.コードは通常,プログラムの実行中に書き換えられることはありません.CPUはこのコードを読みながらプログラムを実行していきます.

 プログラムの実行には,通常,コード以外に定数と変数が必要になります.コンパイル時に初期値が決まっていてその後いっさい変更のないものが定数で,プログラムの実行中に値が変更されるものが変数です.定数はROM(read only memory)に格納しておけます.一方,変数のためにはRAM(random access memory)が必要になります.

 つまり,プログラムは,その内容が変わることのないコードと定数(以下ではまとめてコード部と呼ぶ),そして実行中に値が変わる変数(同じく変数部と呼ぶ)から構成されています.

 さて,ランタイム構造の話に戻りますが,fact(3)の計算過程を見ていると関数factのコピーが三つあるようでした.すると,factの計算では再帰呼び出しが起こるたびに,別々にコード部と変数部を動的に(その場その場で)作って実行しているのでしょうか?

 残念ながらそうではありません.関数factは小さな関数なのでそのコード部をコピーしてもたいしたことはありませんが,一般にコード部のサイズが大きいと考えると,あまり効率的ではないからです.実際には,図1-2に示すように変数部のみを動的に作って実行しています.三つの変数部のメモリを確保する部分はスタックと呼ばれるRAM上の領域です.スタックは,組み込みソフトウェアを開発している間はずっとつきあうことになるものです.

f01_02.gif
〔図1-2〕関数factの変数部はスタック内に確保される
関数factのコード部は一つだけ存在する.関数factに異なる引き数が与えられるたびに,変数部用のメモリ領域がスタック内に確保される.計算が終わればこのメモリ領域は解放される.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日