Точное ли это определение? Полное ли это определение, или нужны дополнеения?
Создается ли стек перед самым использованием, или нет? если нет - то когда создается?
Как определяются размеры стека?
Разбираюсь в функциями getchar(), putchar(). Листинг тут https://pastebin.com/qhcKdCY9
Тут один стек или два организуется?
Создается впечатление, что один. Что первая функция просто берет по одному символу из входного потока, а вторая функция организовывает стек, складывает в него измененные данные, и когда данные больше не поступают, выдает все содержимое стека на экран? или я неправильно процесс представляю?
Я новичок, самостоятельно учу Си как первый язык. Про LIFO, LILO и так все понятно.
Спасибо!!!
Другие языки программирования и технологии
Можно ли сказать, что стек - временный участок памяти, в котором данные хранятся по принципу LIFO(last in first out)?
Ни одного стека в коде не вижу.
getchar берет символ из входного потока.
putchar выводит символ в выходной поток.
"и когда данные больше не поступают, выдает все содержимое стека на экран" - это называется "буферизация" - непосредственно вывод происходит не каждого символа, а, или блоков из нескольких символов, либо, действительно, пока данные долго не поступают. как реализована буферизация - внутреннее дело компилятора/операционной системы.
getchar берет символ из входного потока.
putchar выводит символ в выходной поток.
"и когда данные больше не поступают, выдает все содержимое стека на экран" - это называется "буферизация" - непосредственно вывод происходит не каждого символа, а, или блоков из нескольких символов, либо, действительно, пока данные долго не поступают. как реализована буферизация - внутреннее дело компилятора/операционной системы.
Стек - это очередь, организованная по принципу LIFO; без какой либо привязки к способу её организации и хранения. Пачка бумаг на столе - это тоже стек.
В какой именно памяти будет храниться стек - это определяет программист. Хоть в файле на диске.
В какой именно памяти будет храниться стек - это определяет программист. Хоть в файле на диске.
Почему - временный? Просто участок оперативной памяти.
В приведенном листинге никаких стеков не нашел, просто цикл по вводу и выводу, хранится только одно введенное значение.
В приведенном листинге никаких стеков не нашел, просто цикл по вводу и выводу, хранится только одно введенное значение.
Не обязательно "участок памяти". Башенка из кубиков - это тоже стэк - мы можем положить туда только сверху, и снять кубик можем тоже только сверху.
Если задуматься, как стек работает, на что реагирует, то можно сказать следующее.
Стек наиболее часто используется в функциях ввода-вывода, когда длинная цепочка данных (или их адресов) , в соответствии со списком данных, запихивается в стек, чтобы быть считанной для форматирования в момент ввода-вывода. Или запихиваются форматированные данные, чтобы вывести потом весь стек.
В остальных случаях стек нужен только как пользовательская временная динамическая память переменной длины, или автоматически управляемый буфер, Суть его в том, чтобы на каждом шаге добавления данных память расширялась, а при считывании данных обязательно очищалась и/или освобождалась. Это алгоритмически отличается от использования простого буфера, который никогда не очищается или очищается отдельным циклом.
В Объектно ориентированной программе (ООП, С++) стек можно запрограммировать как отдельный объект, и это почти не будет отличаться от обычной функции, использующей стек, потому что стек должен иметь строгую последовательность исполнения элементарных операций. Проще говоря, стек это не только память, но и функции, обеспечивающие цикл действий по копированию данных и управлению указателями стека. В этом смысле он - программный объект ООП. Когда стек пополняется или опустошается происходит изменение указателя. Когда стек пустеет, то должна быть обеспечена (как в файле) обработка этого события. То же самое при переполнении стека.
Стек наиболее часто используется в функциях ввода-вывода, когда длинная цепочка данных (или их адресов) , в соответствии со списком данных, запихивается в стек, чтобы быть считанной для форматирования в момент ввода-вывода. Или запихиваются форматированные данные, чтобы вывести потом весь стек.
В остальных случаях стек нужен только как пользовательская временная динамическая память переменной длины, или автоматически управляемый буфер, Суть его в том, чтобы на каждом шаге добавления данных память расширялась, а при считывании данных обязательно очищалась и/или освобождалась. Это алгоритмически отличается от использования простого буфера, который никогда не очищается или очищается отдельным циклом.
В Объектно ориентированной программе (ООП, С++) стек можно запрограммировать как отдельный объект, и это почти не будет отличаться от обычной функции, использующей стек, потому что стек должен иметь строгую последовательность исполнения элементарных операций. Проще говоря, стек это не только память, но и функции, обеспечивающие цикл действий по копированию данных и управлению указателями стека. В этом смысле он - программный объект ООП. Когда стек пополняется или опустошается происходит изменение указателя. Когда стек пустеет, то должна быть обеспечена (как в файле) обработка этого события. То же самое при переполнении стека.
есть замечательный сайт, где можно удобно смотреть во что компилится программа; push и pop выполняют операции со стаком
godbolt.org/g/sjtdEi
godbolt.org/g/sjtdEi
стек может иметь разные методы хранения лифо, фифо например
эм... что?
У тя вопрос настолько неправильный, что даж хз, на чо ответить...
У тя вопрос настолько неправильный, что даж хз, на чо ответить...
Похожие вопросы
- принцип программирование баз данных? Как происходит программирование баз данных по каким принципам, правилам???
- Помогите с проблемой,Есть ли или существует метод-способ востоновить данные,файлы с карты памяти телефона.
- Помогите, пожалуйста, найти ошибку в программе сортировки стека (по убыванию ) на Си.
- ВОПРОС программистам Интересует стек и работа с памятью. В каких учебниках можно про это узнать более детально?
- Вопрос по С++. Стек
- Переменные и стек
- Что такое стек и куча? Они абстрактные понятия, или же конкретные? Очень сильно запутался.
- Помогите, пожалуйста, работа со стеками в среде С++.
- Что такое стек?
- Где хранятся данные, записываемые в файл?
Может глянете мое новое определение, если не трудно?
Можно ли сказать, применительно к моему листингу, что
getchar() берет данные из входного потока по одному символу,
putchar() по одному символу помещает в буфер (предварительно преобразовав, если надо)
по окончании цикла while() данные из буфера выводятся на монитор.