Может быть или не быть никакой разницы в производительности.Существует различие в семантике.
fread(a, 1, 1000, stdin);
пытается прочитать 1000 элементов данных, каждый из которых имеет длину 1 байт.
fread(a, 1000, 1, stdin);
пытается прочитать 1 элемент данных, который составляет 1000 байтовlong.
Они отличаются, потому что fread()
возвращает количество элементов данных, которые он смог прочитать, а не количество байтов.Если он достигает конца файла (или состояния ошибки) перед чтением полных 1000 байтов, первая версия должна точно указать, сколько байтов она прочитала;вторая просто дает сбой и возвращает 0.
На практике, вероятно, это просто вызов функции более низкого уровня, которая пытается прочитать 1000 байтов и показывает, сколько байтов она фактически прочитала.Для больших чтений он может сделать несколько вызовов более низкого уровня.Вычисление значения, которое будет возвращено fread()
, отличается, но затраты на вычисление тривиальны.
Может быть разница, если реализация может сказать, прежде чем пытаться прочитать данные, чтонедостаточно данных для чтения.Например, если вы читаете из 900-байтового файла, первая версия будет читать все 900 байтов и возвращать 900, а вторая может ничего не читать.В обоих случаях индикатор положения файла увеличивается на количество символов успешно прочитанных, т. Е. 900.
Но в целом вам, вероятно, следует выбрать способ его вызова на основе какой информациитебе нужно от этого.Прочитайте один элемент данных, если частичное чтение ничем не лучше, чем вообще ничего не читать.Читайте небольшими частями, если частичное чтение полезно.