Используемый командами time и ulimit килобайт равен 1000 (СИ) или 1024 (старая школа) байтам?

Используемый командами time и ulimit килобайт равен 1000 (СИ) или 1024 (старая школа) байтам?

От man time:

M      Maximum resident set size of the process during its lifetime, in Kilobytes.

От ulimit -a:

max memory size         (kbytes, -m) unlimited

Но«килобайт» может означать как 1000, так и 1024 байта.. Я думаю, что здесь это около 1024, но я хочу быть уверен. Авторитетная ссылка будет оценена.

Можете смело перефразировать мой вопрос следующим образом:выполнять timeи ulimitсоблюдать рекомендации МЭК или использовать «килобайт/кбайт» в значении кибибайт.

решение1

Заman dir.1:

The SIZE argument is an integer and optional unit (example: 10K is 10*1024). Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (powers of 1000).

Заinfo ls:

‘-h’
‘--human-readable’
Append a size letter to each size, such as ‘M’ for mebibytes. Powers of 1024 are used, not 1000; ‘M’ stands for 1,048,576 bytes. This option is equivalent to --block-size=human-readable. Use the --si option if you prefer powers of 1000.

Вывод для lsдополнительно дублируется в источникездесьиздесь.

Кажется, что одна буква — это измерение 1024. ДвецифраСокращения символов соответствуют 1000 единицам СИ.

Так как ulimitвстроен в bash, то обращение к их источнику является окончательным... источником. Я часто каламбурю, но вы можете это заметитьздесьиздесь:

Values are in 1024-byte increments, except for -t, which is in seconds,
-p, which is in increments of 512 bytes, and -u, which is an unscaled
number of processes.

Ваша версия, вероятно, старше, чем bash-5.2-rc3, что нормально, размер этого элемента не менялся по крайней мере за последнее десятилетие с момента выпуска 4.0.38. Вы можете это увидетьздесьиздесь.

Редактировать: страница руководства units.7подробно объясняет это, но, судя по всему, она довольно запутанная.UnitsPolicy.

решение2

Нет, килобайт - это 1000. Мы следуемМеждународная система единицпоэтому приставка «кило» относится к 1000, а не к 1024. Любая другая ссылка неверна.

1024 — этоКибибайты(кивотбини капли)

Из ulimit -a:

максимальный размер памяти (кбайт, -м) неограничен

Я считаю это ошибкой. Должно быть явно указано кило или киби, а не килобайты

человеко-время:

M Максимальный размер резидентного набора процесса за время его существования, в килобайтах.

  • ulimitиспользует KIBIbytes

    limit.rlim_cur = newlimit * 512;
    limit.rlim_max = newlimit * 512;
    
  • время GNUusus KIBIbytes если вы посмотрите на источник. Руководство неверное.

    Оно использует:

    tmp = pages / 1024;  /* Smaller first, */
    size = tmp / 1024;    /* then smaller.  */
    

решение3

Акилобайтсоставляет 1000 байт (префикс СИ означает тысячу).кибибайтсоставляет 1024 байта (префикс IEC означает килобинарный).

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

Вот почему жесткий диск емкостью 1 ТБ (терабайт) имеет емкость всего 0,91 ТиБ (тебибайт, согласно данным файловой системы).

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

Так как ulimitна странице справки написано:«Значения имеют шаг в 1024 байта», я считаю, что можно с уверенностью предположить, что они на самом деле означаюткибибайтыкогда они пишуткилобайт.

С другой стороны, поскольку man timeявно указано, что значения находятся вкилобайты, то можно было бы предположить, что авторы знают, что такое килобайт, и что они действительно имеют в виду 1000 байт.

Однако в любом случае, чтобы быть на 100% уверенным, что авторы не написали ничего явно неверного, вам следует проверить исходный код или проконсультироваться с автором программы.

Использованная литература:

Связанный контент