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

What responsibilities are to comply C\C++ standard?

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

另一个例子——STM32 的 g++ 支持 std::vectors,并且它工作正常,即使没有 OS 的内存管理。 这意味着编译器内部有一些内存管理器?或不?

So, does it mean now, that without OS I'll achieve threading support???

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

This mean that some memory manager is inside compiler?

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

有两种 C 实现 — hosted 实现,提供标准库,freestanding 实现,只需要提供核心语言和最少数量的headers。嵌入式系统的实现通常是独立的。这在 the C11 spec.

的第 4 节中有详细描述

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