遵守C \ C ++标准有哪些责任?

时间:2015-05-15 10:46:24

标签: c++ c gcc stm32 c11

有点愚蠢的问题。 例如我读过,在C11中增加了对线程的支持。 然后,例如我的STM32F4的GCC编译器说,它支持C11标准。 那么,现在是否意味着没有操作系统我将实现线程支持???但它怎么可能?

另一个例子 - 即使没有操作系统的内存管理,STM32的g ++也支持std :: vectors和IT WORKS。 这意味着一些内存管理器在内部编译器?或不?

2 个答案:

答案 0 :(得分:7)

有两种C实现 - 托管实现(提供标准库)和独立实现,只需要提供核心语言和最小数量标题。嵌入式系统的实现通常是独立的。这在the C11 spec的第4节中有详细描述。

此外,即使在托管实现中,也可以省略许多功能。特别是,线程支持是可选的(省略线程支持的托管实现必须定义宏__STDC_NO_THREADS__)。这在规范的第6.10.8.3节中描述。​​

答案 1 :(得分:2)

  

那么,现在是否意味着没有操作系统我将实现线程支持???

这意味着指定了语言,以便可以正确地编写多线程程序,并在访问共享数据时具有良好定义的同步;并且完整的托管实现应该提供线程库。这并不意味着所有实现都允许多个线程:这将取决于底层系统的支持。

  

这意味着某些内存管理器在编译器内部?

是的,通常语言运行时包括堆管理器。它将被分配一些内存(或者从OS获得,或者以一些其他依赖于系统的方式分配,可能只是在程序启动时作为静态块),然后它分成较小的块以支持程序内的动态分配。