フリースタンディング環境
フリースタンディング環境(フリースタンディングかんきょう、英: freestanding environment)はC言語およびC++のプログラム実行環境の一種である。対義語はホスト環境(英: hosted environment)。 概要フリースタンディング環境は、オペレーティングシステム (OS) なしでプログラムを実行しなければいけない環境を指すCおよびC++の用語である。それぞれ国際標準化機構による規格ISO/IEC 9899およびISO/IEC 14882で規定されている[注釈 1]。OSなしで実行するプログラムとは、組み込みシステム用のプログラムであったり、あるいはOSそのものであったりする。ホスト環境は逆にOSが存在することを想定しており、一般的なアプリケーションソフトウェアやミドルウェアを指す。ただし、フリースタンディング環境用としてつくられたプログラムはOSなしで動作する必要はない。OS上で動くフリースタンディング環境のプログラムとしてはデモシーン用のプログラムが代表的である。 実行環境を指定しない場合は、ホスト環境を対象にしていることがある。組み込みシステムではフリースタンディング環境を対象にすることもある。μITRONはオペレーティングシステムの一種であるが、フリースタンディング環境を選択しているシステムとして提供していることがある。TOPPERSプロジェクトのTRON系、OSEK系などで、模擬環境でないものは、フリースタンディング環境での利用を想定してソースコードを提供している。 ホスト環境との違いフリースタンディング環境はOSから提供される機能が無いこと、プログラムを書き込む記憶領域が狭いことを想定し、ホスト環境で標準Cライブラリとして要求される関数は、Cでは一切要求せず、またC++では言語機能を実装するために必要とされる最低限のものしか要求しない。Cにおいては定義[要説明]を記述したヘッダーファイルのみを要求する(詳細は#制限を参照)。このため、Cにおいてはホスト環境で必要とされるランタイムライブラリを必要としない。 ホスト環境における 制限フリースタンディング環境では言語仕様に以下の制限を受ける。
例この Hello world は GCC と Linux の組み合わせで動作する。 #include <unistd.h>
void _start (void)
{
char msg [] = "Hello, world!\n" ;
write (1, msg, sizeof msg) ;
_exit (0) ;
}
標準Cライブラリなし類似概念として、コンパイラによっては標準Cライブラリなしでコンパイルすることも可能。例えば GCC の場合、 例この標準Cライブラリ未使用の Hello world は GCC、Linux、x86-64 の組み合わせで動作する。 static void write (long fd, const void *buf, unsigned long count)
{
__asm__ volatile
(
"movq %0, %%rax \n\t"
"movq %1, %%rdi \n\t"
"movq %2, %%rsi \n\t"
"movq %3, %%rdx \n\t"
"syscall \n\t"
:
: "i" (1), "r" (fd), "r" (buf), "r" (count)
: "%rax", "%rdi", "%rsi", "%rdx"
) ;
}
static void _exit (long status)
{
__asm__ volatile (
"movq %0, %%rax \n\t"
"movq %1, %%rdi \n\t"
"syscall \n\t"
:
: "i" (60), "r" (status)
: "%rax", "%rdi") ;
}
void _start (void)
{
write (1, "Hello, world!\n", 14) ;
_exit (0) ;
}
脚注注釈出典関連項目 |
Portal di Ensiklopedia Dunia