Что такое буфер?

Насколько мое понимание языков идет, буфер является любой частью памяти, в которой данные хранятся как интервал, переменные плавающие, символьные массивы и т.д. Однако я читал переполнение буфера и столкнулся с этой ссылкой, в то время как чтение о схеме стека http://www.tenouk.com/Bufferoverflowc/Bufferoverflow2a.html The в этой ссылке разделяет буфер от локальных переменных функции. Это корректно? Что такое буфер затем?

9
задан JasonMArcher 26 May 2015 в 23:48
поделиться

6 ответов

На странице, на которую вы указали ссылку, думайте о «Буфере» как о «единственной локальной переменной, о которой мы заботимся», а о «Локально объявленные переменные» как о «Все локально объявленные переменные, которые не Буфер ".

1
ответ дан 4 December 2019 в 23:38
поделиться

Согласно Википедия :

При вычислениях буфер - это область памяти, используемая для временного хранения данных во время их перемещения из одного места в другое. Обычно данные хранятся в буфере по мере их извлечения с устройства ввода (например, клавиатуры) или непосредственно перед отправкой на устройство вывода (например, принтер). Однако при перемещении данных между процессами внутри компьютера может использоваться буфер. Это сопоставимо с буферами в электросвязи. Буферы могут быть реализованы аппаратно или программно, но подавляющее большинство буферов реализовано программно. Буферы обычно используются, когда есть разница между скоростью получения данных и скоростью, с которой они могут обрабатываться, или в случае, когда эти скорости являются переменными, например, в диспетчере очереди печати или при потоковой передаче видео в Интернете.

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

0
ответ дан 4 December 2019 в 23:38
поделиться

Не воспринимайте эту диаграмму слишком буквально. Ваше первое определение было правильным. Этот буфер может быть локальной переменной или находиться в куче или в какой-либо другой области памяти ... это очень общая концепция.

0
ответ дан 4 December 2019 в 23:38
поделиться

Буфер - это просто блок памяти, используемый для хранения произвольных данных. На диаграмме я думаю, что «буфер» предназначен для отображения буфера , который объявлен как локальная переменная, например char myString [80]; . Опасность заключается в том, что если длина данных, помещаемых в этот буфер, строго не контролируется, вы можете, например, strcpy (...) некоторые данные в буфер и переполняют конец - в этот момент сохраненные регистры будут вытоптаны, и возврат из функции может (и почти наверняка) нанести ущерб.

0
ответ дан 4 December 2019 в 23:38
поделиться

Насколько я понимаю языков идет, буфер любой часть памяти, в которой хранятся данные хранятся как переменные типа int, float, символьные массивы и т. д.

Ну, не только данные, если бы это было так, все переменные были бы сохранены в буферах, и термин был бы бессмысленным.

Буфер - это то, что вы используете для временного хранения, когда данные приходят из одного места и отправляются в другое. Обычно буфер содержит намного больше, чем одна переменная, но, конечно, есть особые случаи, когда буфер также довольно мал.

Локальная переменная может использоваться в качестве буфера, так что она будет размещена в стеке, но поскольку буферы обычно большие, было бы непрактично использовать много места в стеке, поэтому они обычно выделяются где-то еще.

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

1
ответ дан 4 December 2019 в 23:38
поделиться

Очень абстрактная аналогия: локальные переменные - это то, с чем вы сейчас работаете; они то, что вы держите в руках. Буфер относится к источнику данных, как ложка для суповой тарелки или мерный стакан для водопроводного крана. Держать в руках ложку практичнее, чем миску с супом, а держать в руках текущую струю воды практически невозможно. В любом случае вы используете эту посуду, чтобы пить суп / воду в удобном для вас темпе.

Точнее, локальные переменные - это просто переменные, которые вы объявили внутри функции, а не снаружи. Буфер - это фрагмент памяти (обычно массив), который используется для копирования небольшого фрагмента данных из огромного источника данных, поэтому вы можете обрабатывать его с любой скоростью, с которой может справиться ваш компьютер или программа. Вы можете объявить буфер вне своей функции, если хотите, чтобы его заполняла другая функция, или вы можете объявить его как локальную переменную, если вы собираетесь заполнять его и использовать самостоятельно. Это действительно общий термин.

Некоторые примеры:

  • Аудиобуфер может содержать около 0,5 секунды звука для копирования со звуковой карты в память программы для обработки программой или из памяти программы на звуковую карту для вывода на динамики. . Ваша программа могла бы немедленно декодировать mp3-файл и выгрузить все данные на вашу карту, но в конечном итоге ее размер был бы порядка нескольких сотен МБ, если бы она это сделала, и вам не понравилось бы слушать музыку на 50-кратной скорости - поэтому он декодирует понемногу и сохраняет его в буфере.
  • Видеобуфер может быть заполнен в вашей памяти и / или на жестком диске из YouTube, когда вы запускаете видео, поэтому вы не делаете паузу каждые несколько секунд из-за слишком медленного подключения к Интернету.
  • Программа может использовать символьный буфер для передачи некоторого текста от одной функции к другой. Если вы используете cin или ReadLine или get или что-то еще, чтобы получить текстовый ввод с клавиатуры, было бы справедливо вызвать строку, которая сохраняется в «буфере символов». В этом случае вы должны объявить буфер как локальную переменную.
4
ответ дан 4 December 2019 в 23:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: