【发布时间】:2015-07-27 06:20:45
【问题描述】:
有点愚蠢的问题。 例如,我读过,在 C11 中添加了对线程的支持。 然后,例如我的 STM32F4 的 GCC 编译器说,它支持 C11 标准。 那么,这是否意味着,如果没有操作系统,我将获得线程支持???但怎么可能呢?
另一个例子 - STM32 的 g++ 支持 std::vectors,并且它可以工作,即使没有操作系统的内存管理。 这意味着一些内存管理器在编译器内部?或不?
【问题讨论】:
-
必须始终有某种底层支持。即使没有操作系统,库中也可能有底层特定于平台的代码来处理内存或简单的多任务处理等事情。如果不知道您的编译器版本(我们不知道)以及您链接的软件或其他支持库,就不可能说什么。
-
您很可能正在查看所谓的“独立”编译器工具链。 C++11 具有核心语言特性(期望它们存在)和库特性(期望它们参差不齐/不存在)。此外,“内存管理”始终是一项 libc 任务。操作系统必须有一些基本的进程模型(即使它只是“内存是你的”)
-
C11 线程支持是可选的,实现可能会定义
__STDC_NO_THREADS__以指示不支持threads.h。 -
C11 7.26.1/2 "定义宏
__STDC_NO_THREADS__的实现不需要提供这个头文件,也不需要支持它的任何功能。"