Роббинс Арнольд
Шрифт:
Системный вызов
Функцию
Практически, вам не нужно непосредственно использовать
Еще более практично вообще никогда не использовать эти процедуры. Программа, которая их использует, не может затем использовать также и
Но знать о низкоуровневых механизмах стоит, и конечно же, набор функций
3.2.4. Вызовы ленивых программистов:
«Опасность, Билл Робинсон! Опасность!»
– Робот -Есть еще одна дополнительная функция выделения памяти, о которой вам нужно знать. Мы обсуждаем ее лишь для того, чтобы вы поняли ее, когда увидите, но не следует использовать ее в новых программах! Эта функция называется
Функция
На первый взгляд,
• Функция не является стандартной; она не включена ни в какой стандарт, ни в ISO, ни в С или POSIX.
• Функция не переносима. Хотя она существует на многих системах Unix и GNU/Linux, она не существует на не-Unix системах. Это проблема, поскольку код часто должен быть многоплатформенным, выходя за пределы просто Linux и Unix.
• На некоторых системах
• Цитируя справку [45] (добавлено выделение): «Функция
• Снова цитируя справку: «На многих системах
45
alloca(3) — Примеч. науч. ред.
• Она потворствует неряшливому программированию. Тщательная и корректная работа с памятью не сложна; вам просто нужно подумать о том, что вы делаете, и планировать заранее.
GCC обычно использует встроенную версию функции, которая действует с использованием внутритекстового (inline) кода. В результате есть другие последствия
Факт, что код является внутритекстовым (inline), означает, что невозможно получить адрес этой функции или изменить ее поведение путем компоновки с другой библиотекой.
Внутритекстовый код часто состоит из одной инструкции, подгоняющей указатель стека, и не проверяет переполнение стека. Поэтому нет возврата