Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/freestanding"

From cppreference.com
< cpp
(References: C++03)
(wording)
Line 1: Line 1:
 
{{title|Freestanding and hosted implementations}}
 
{{title|Freestanding and hosted implementations}}
  
There are two kinds of implementations defined by the C++ standard: '''''hosted''''' and '''''freestanding''''' implementations. For ''hosted'' implementations the set of available libraries required by the C++ standard is much larger than for ''freestanding'' ones. In a ''freestanding'' implementation execution may happen without an operating system.
+
There are two kinds of implementations defined by the C++ standard: '''''hosted''''' and '''''freestanding''''' implementations. For ''hosted'' implementations the set of standard library headers required by the C++ standard is much larger than for ''freestanding'' ones. In a ''freestanding'' implementation execution may happen without an operating system.
  
 
A ''freestanding'' implementation has an implementation-defined set of headers. This set includes at least the headers in the following table:
 
A ''freestanding'' implementation has an implementation-defined set of headers. This set includes at least the headers in the following table:

Revision as of 22:14, 10 September 2018


There are two kinds of implementations defined by the C++ standard: hosted and freestanding implementations. For hosted implementations the set of standard library headers required by the C++ standard is much larger than for freestanding ones. In a freestanding implementation execution may happen without an operating system.

A freestanding implementation has an implementation-defined set of headers. This set includes at least the headers in the following table:

Headers required for a freestanding implementation
<ciso646> (since C++11) (until C++20)
Types <cstddef>
Implementation properties <limits>
<cfloat> <climits> (since C++11)
<version> (since C++20)
Integer types <cstdint> (since C++11)
Start and termination <cstdlib> (partial)[1]
Dynamic memory management <new>
Type identification <typeinfo>
Exception handling <exception>
Initializer lists <initializer_list> (since C++11)
Other runtime support <cstdarg>
Type traits <type_traits> (since C++11)
Atomics <atomic> (since C++11)
Bit manipulation <bit> (since C++20)
Deprecated headers <cstdalign> <cstdbool> (since C++11) (until C++20)
  1. The supplied version of the header <cstdlib> shall declare at least the functions std::abort, std::atexit, std::exit, std::at_quick_exit and std::quick_exit(since C++11).

The following are the differences between freestanding and hosted implementations:

(C++17)
freestanding hosted
Under a freestanding implementation, it is implementation-defined whether a program can have more than one thread of execution. Under a hosted implementation, a C++ program can have more than one thread running concurrently.
In a freestanding implementation, it is implementation-defined whether a program is required to define a main function. Start-up and termination is implementation-defined; start-up contains the execution of constructors for objects of namespace scope with static storage duration; termination contains the execution of destructors for objects with static storage duration. In a hosted implementation, a program must contain a global function called main. Executing a program starts a main thread of execution in which the main function is invoked, and in which variables of static storage duration might be initialized and destroyed.

References

  • 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)