名前空間
変種
操作

フリースタンディング処理系とホスト処理系

提供: cppreference.com
< cpp

ホスト処理系とフリースタンディング処理系の2種類の処理系が C++ 標準によって定義されています。 ホスト処理系に対して C++ 標準が要求する標準ライブラリヘッダの集合はフリースタンディング処理系に対するものよりも大きなものです。 フリースタンディング処理系では実行はオペレーティングシステムなしで行われる場合もあります。

目次

[編集] 標準ライブラリヘッダに対する要件

フリースタンディング処理系は処理系定義のヘッダの集合を持ちますが、この集合には少なくとも以下の表のヘッダが含まれます。

フリースタンディング処理系に対して要求されるヘッダ
<ciso646> (C++11およびそれ以降) (C++20以前)
<cstddef>
処理系の性質 <limits>
<cfloat> <climits> (C++11およびそれ以降)
<version> (C++20およびそれ以降)
整数型 <cstdint> (C++11およびそれ以降)
開始と終了 <cstdlib> (一部)[1]
動的メモリ管理 <new>
型識別 <typeinfo>
例外処理 <exception>
初期化子リスト <initializer_list> (C++11およびそれ以降)
その他の実行時サポート <cstdarg>
型特性 <type_traits> (C++11およびそれ以降)
アトミック <atomic> (C++11およびそれ以降)
ビット操作 <bit> (C++20およびそれ以降)
非推奨のヘッダ <cstdalign> <cstdbool> (C++11およびそれ以降) (C++20以前)
  1. ヘッダ <cstdlib> の供給されるバージョンは少なくとも関数 std::abortstd::atexitstd::exitstd::at_quick_exit および std::quick_exit (C++11およびそれ以降) を宣言しなければなりません。

マルチスレッド実行およびデータ競合に対する要件

フリースタンディング ホスト
フリースタンディング処理系の下では、プログラムが複数の実行のスレッドを持つことができるかどうかは処理系定義です。 ホスト処理系の下では、 C++ のプログラムは並行的に実行される複数のスレッドを持つことができます。
(C++11およびそれ以降)

[編集] main 関数に対する要件

フリースタンディング ホスト
フリースタンディング処理系では、プログラムが main 関数を定義しなければならないかどうかは処理系定義です。 スタートアップおよび終了は処理系定義です。 スタートアップには静的記憶域期間を持つ名前空間スコープのオブジェクトに対するコンストラクタの実行が含まれます。 終了には静的記憶域期間を持つオブジェクトに対するデストラクタの実行が含まれます。 ホスト処理系では、プログラムは main という名前のグローバル関数を含まなければなりません。 プログラムを実行すると main 関数を呼び出すメインスレッドを開始します。 メインスレッドでは静的記憶域期間を持つ変数の初期化と破棄も行われます。

[編集] 参考文献

  • C++17 standard (ISO/IEC 14882:2017):
  • 4.1 Implementation compliance (p: 5)
  • 4.7 Multi-threaded executions and data races (p: 15)
  • 6.6.1 Main function (p: 66)
  • 20.5.1.3 Freestanding implementations (p: 458)
  • C++14 standard (ISO/IEC 14882:2014):
  • 1.4 Implementation compliance (p: 5)
  • 1.10 Multi-threaded executions and data races (p: 11)
  • 3.6.1 Main function (p: 62)
  • 17.6.1.3 Freestanding implementations (p: 441)
  • C++11 standard (ISO/IEC 14882:2011):
  • 1.4 Implementation compliance (p: 5)
  • 1.10 Multi-threaded executions and data races (p: 11)
  • 3.6.1 Main function (p: 58)
  • 17.6.1.3 Freestanding implementations (p: 408)
  • C++03 standard (ISO/IEC 14882:2003):
  • 1.4 Implementation compliance (p: 3)
  • 3.6.1 Main function (p: 43)
  • 17.4.1.3 Freestanding implementations (p: 326)

[編集] 関連項目