Подтвердить что ты не робот

Нет кучи в c?

Я только начал читать "Язык программирования C" Брайана Кернигана и Денниса Ритчи, и я нашел это утверждение:

Язык не определяет средства хранения, отличные от статического определения, и дисциплину стека, предоставляемую локальными переменными функций; нет кучи или сборка мусора.

Значит ли это, что это связано с функцией malloc(), которая возвращает некоторый адрес памяти из кучи, что C получает доступ к памяти кучи? И тогда должен malloc быть написан на каком-то другом языке, скорее всего, на сборке или B?

Это может быть глупое сомнение, но я должен его очистить. Спасибо.

4b9b3361

Ответ 1

Сам язык C не указывает непосредственно для кучи или как он должен работать, но предоставляет указатели и т.д.

malloc, а его кузены являются частью чего-то, называемого стандартной библиотекой C, и являются функциями, с которыми вы ссылаетесь, с любой стандартной реализацией C, и они предоставляют доступ к не статической или стеке памяти. На каждой платформе, как эти функции фактически получают и управляют этой памятью, могут быть разные.

C - это давно испеченный язык и библиотека, и теперь все это похоже на часть. Но когда K & R писал эту книгу, это было не так очевидно, и это утверждение является разъяснением того, что принадлежит синтаксису самого языка (в сравнении с тем, что обычно предоставляется поддерживающими библиотеками).

Ответ 2

Я думаю, что авторы очень точны, когда говорят, что они говорят о "языке". Когда вы говорите о C, у вас есть язык и стандартные библиотеки. В самом языке нет возможности выделения динамической памяти, но стандартная библиотека предоставляет эти возможности.

Ответ 3

В языке явно не определена куча. Однако реализации используют его для динамически распределенной памяти.

Смотрите это обсуждение различных видов размещения, включая кучу:

http://en.wikipedia.org/wiki/C_dynamic_memory_allocation

Ответ 4

malloc получает выделенную им память из ядра операционной системы. Все языки делают это. Таким образом, операционная система гарантирует, что программы имеют доступное пространство, хотя это не мешает им или не может помешать им, особенно написанным на C, попытаться выйти за пределы каких-либо ограничений.