Другие языки программирования и технологии

Можно ли сказать, что стек - временный участок памяти, в котором данные хранятся по принципу LIFO(last in first out)?

Точное ли это определение? Полное ли это определение, или нужны дополнеения?
Создается ли стек перед самым использованием, или нет? если нет - то когда создается?
Как определяются размеры стека?
Разбираюсь в функциями getchar(), putchar(). Листинг тут https://pastebin.com/qhcKdCY9
Тут один стек или два организуется?
Создается впечатление, что один. Что первая функция просто берет по одному символу из входного потока, а вторая функция организовывает стек, складывает в него измененные данные, и когда данные больше не поступают, выдает все содержимое стека на экран? или я неправильно процесс представляю?
Я новичок, самостоятельно учу Си как первый язык. Про LIFO, LILO и так все понятно.
Спасибо!!!
Алексей Фомин
Алексей Фомин
15 714
Ни одного стека в коде не вижу.
getchar берет символ из входного потока.
putchar выводит символ в выходной поток.
"и когда данные больше не поступают, выдает все содержимое стека на экран" - это называется "буферизация" - непосредственно вывод происходит не каждого символа, а, или блоков из нескольких символов, либо, действительно, пока данные долго не поступают. как реализована буферизация - внутреннее дело компилятора/операционной системы.
Саша Стрельцов
Саша Стрельцов
25 516
Лучший ответ
Алексей Фомин Спасибо! супер! то, что надо!!!
Может глянете мое новое определение, если не трудно?
Можно ли сказать, применительно к моему листингу, что
getchar() берет данные из входного потока по одному символу,
putchar() по одному символу помещает в буфер (предварительно преобразовав, если надо)
по окончании цикла while() данные из буфера выводятся на монитор.
Стек - это очередь, организованная по принципу LIFO; без какой либо привязки к способу её организации и хранения. Пачка бумаг на столе - это тоже стек.

В какой именно памяти будет храниться стек - это определяет программист. Хоть в файле на диске.
Юрий Плотников
Юрий Плотников
78 342
Почему - временный? Просто участок оперативной памяти.
В приведенном листинге никаких стеков не нашел, просто цикл по вводу и выводу, хранится только одно введенное значение.
Сундет Мусаев
Сундет Мусаев
68 995
Не обязательно "участок памяти". Башенка из кубиков - это тоже стэк - мы можем положить туда только сверху, и снять кубик можем тоже только сверху.
Олег Олегыч
Олег Олегыч
94 429
Если задуматься, как стек работает, на что реагирует, то можно сказать следующее.
Стек наиболее часто используется в функциях ввода-вывода, когда длинная цепочка данных (или их адресов) , в соответствии со списком данных, запихивается в стек, чтобы быть считанной для форматирования в момент ввода-вывода. Или запихиваются форматированные данные, чтобы вывести потом весь стек.
В остальных случаях стек нужен только как пользовательская временная динамическая память переменной длины, или автоматически управляемый буфер, Суть его в том, чтобы на каждом шаге добавления данных память расширялась, а при считывании данных обязательно очищалась и/или освобождалась. Это алгоритмически отличается от использования простого буфера, который никогда не очищается или очищается отдельным циклом.
В Объектно ориентированной программе (ООП, С++) стек можно запрограммировать как отдельный объект, и это почти не будет отличаться от обычной функции, использующей стек, потому что стек должен иметь строгую последовательность исполнения элементарных операций. Проще говоря, стек это не только память, но и функции, обеспечивающие цикл действий по копированию данных и управлению указателями стека. В этом смысле он - программный объект ООП. Когда стек пополняется или опустошается происходит изменение указателя. Когда стек пустеет, то должна быть обеспечена (как в файле) обработка этого события. То же самое при переполнении стека.
АK
Алексей Kazantsev
70 042
есть замечательный сайт, где можно удобно смотреть во что компилится программа; push и pop выполняют операции со стаком

godbolt.org/g/sjtdEi
стек может иметь разные методы хранения лифо, фифо например
эм... что?
У тя вопрос настолько неправильный, что даж хз, на чо ответить...