TL; DR:
Почему и когда malloc () не будет доступен в C?
Единственное, что в общем можно сказать, это то, что malloc()
будет предоставляться каждой соответствующей, размещенной реализацией C, но есть и другие виды, включая другой соответствующий тип.
Разве malloc не должен находиться в динамической библиотеке внутри компилятора?
Не совсем. malloc()
является частью стандартной библиотеки C, поэтому он предоставляется каждой соответствующей, размещенной реализацией C. Реализация C содержит систему для перевода исходного кода C в исполняемые программы, а также механизм и среду для запуска результирующих программ. Первый тип обычно вращается вокруг компилятора. Последняя включает в себя столько стандартной библиотеки C, сколько обеспечивает реализация, и в этой части находится malloc
, если она доступна. Таким образом, нет, malloc
технически не является частью компилятора .
Я уверен, что это не то различие, на которое вы хотели ссылаться, но оно имеет отношение к ответу. Обратите внимание, что я сказал, что malloc
обеспечивается размещенными реализациями. Это тот тип, с которым вы обычно сталкиваетесь в операционных системах общего назначения. Они создают программы, которые запускаются стандартным способом через хост-ОС, и они предоставляют все функции стандартной библиотеки C в сочетании с ОС. Но есть также автономные реализации. Одно из ключевых отличий заключается в том, что автономные реализации освобождаются от предоставления большей части стандартной библиотеки, включая malloc()
.
Обычно вы найдете автономные реализации для встроенных систем, например вашей, и для них. Они также используются для ядер ОС, загрузчиков и других подобных программ, кроме запуска непосредственно на голом железе. То, что ваши программы работают поверх ОС, делает вашу среду чем-то вроде Cadillac среди встроенных систем, но не гарантирует, что реализация C является размещенной. Поскольку он не обеспечивает malloc
, он не может быть соответствующей размещенной реализацией, но он может быть соответствующей отдельной реализацией. Он должен документировать, какой, если таковой есть, он заявляет. Если он автономен, но предоставляет другие стандартные функции библиотеки, то вы можете считать это роскошью.