Немного глупый вопрос.
Например, я читал, что в C11 была добавлена поддержка потоков.
Тогда, например, компилятор GCC для моего STM32F4 сказал, что он поддерживает стандарт C11.
Так значит ли это, что без ОС я достигну поддержки многопоточности ??? Но как это может быть?
Другой пример — g ++ для STM32 поддерживает std :: vectors, и ЭТО РАБОТАЕТ даже без управления памятью ОС.
Это значит, что какой-то менеджер памяти находится внутри компилятора? Или нет?
Так значит ли это, что без ОС я достигну поддержки многопоточности ???
Это означает, что язык указан так, что многопоточные программы могут быть написаны правильно, с четко определенной синхронизацией при доступе к общим данным; и что полная размещенная реализация должна предоставить библиотеку потоков. Это не означает, что все реализации будут разрешать несколько потоков: это будет зависеть от поддержки базовой системы.
Это значит, что какой-то менеджер памяти находится внутри компилятора?
Да, обычно языковая среда выполнения включает менеджер кучи. Ему будет назначена некоторая память (либо полученная из ОС, либо выделенная каким-либо другим системно-зависимым способом, возможно, просто как статический блок при запуске программы), который затем разделяется на более мелкие кусочки для поддержки динамического выделения в программе.
Есть два вида реализаций C — состоялся реализации, которые предоставляют стандартную библиотеку, и отдельно стоящая реализации, которые должны обеспечить только основной язык и минимальное количество заголовков. Реализации для встроенных систем обычно являются автономными. Это подробно описано в разделе 4 спецификация C11.
Более того, есть ряд функций, которые могут быть опущены даже в размещенной реализации. В частности, поддержка потоков является необязательной (размещенная реализация, в которой отсутствует поддержка потоков, должна определять макрос __STDC_NO_THREADS__
). Это описано в разделе 6.10.8.3 спецификации.