O kilobyte usado pelos comandos time e ulimit é 1000 (SI) ou 1024 (old school) bytes?

O kilobyte usado pelos comandos time e ulimit é 1000 (SI) ou 1024 (old school) bytes?

De man time:

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

De ulimit -a:

max memory size         (kbytes, -m) unlimited

Mas um"kilobyte" pode significar 1000 ou 1024 bytes. Acho que aqui é uma volta de 1024, mas quero ter certeza. Referência oficial seria apreciada.

Sinta-se à vontade para reformular minha pergunta como:faça timee ulimitesteja em conformidade com a recomendação IEC ou use "kilobyte/kbyte" no significado de kibibyte.

Responder1

Porman 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).

Porinfo 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.

A saída para lsé posteriormente copiada na fonteaquieaqui.

Parece que a única letra é a medida 1024. Os doisdígitoas abreviaturas dos caracteres são as 1000 unidades SI.

Como ulimitestá embutido no bash, ir até a fonte é a fonte definitiva. Muitas vezes sou insignificante, mas você pode ver issoaquieaqui:

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.

Sua versão provavelmente é mais antiga que o bash-5.2-rc3, o que é bom, o tamanho desse item não mudou pelo menos na última década desde o lançamento do 4.0.38. Você pode ver issoaquieaqui.

Editar: a página de manual units.7explica isso em detalhes, mas parece ser bastante confuso desde o inícioPolítica de Unidades.

Responder2

Não, kilobytes são 1000. Seguimos oSistema Internacional de Unidadesportanto, o prefixo "quilo" refere-se a 1000 e não a 1024. Qualquer outra referência está errada.

1024 éQuibibytes(kieisbinada)

De ulimit -a:

tamanho máximo de memória (kbytes, -m) ilimitado

Isso eu considero um bug. Deve indicar explicitamente quilo ou kibi; não kbytes

hora do homem:

M Tamanho máximo do conjunto de residentes do processo durante seu tempo de vida, em Kilobytes.

  • limiteusa KIBIbytes

    limit.rlim_cur = newlimit * 512;
    limit.rlim_max = newlimit * 512;
    
  • Hora GNUuse KIBIbytes se você olhar a fonte. O manual está errado.

    Ele usa:

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

Responder3

Aquilobyteé 1000 bytes (prefixo SI significa mil). Aquibibyteé 1024 bytes (prefixo IEC que significa quilo binário).

Esta convenção tem sido usada desde 1998, mas acho que o uso desses prefixos não é tão conhecido como deveria ser.

É também por isso que um disco rígido de 1 TB (terabyte) tem apenas 0,91 TiB (tebibytes, conforme relatado pelo sistema de arquivos).

Uma questão relacionada é quando os autores afirmam que um número é dado em"kbytes". Como esta não é uma declaração oficial, você não sabe se elas significam uma ou outra.

Já que a ulimitpágina de ajuda diz:"Os valores estão em incrementos de 1.024 bytes", acredito que é seguro assumir que eles de fato significamquibibytesquando eles escreveremkbytes.

Por outro lado, uma vez que man timeafirma explicitamente que os valores estão emquilobytes, seria necessário presumir que os autores sabem o que é um kilobyte e que de fato significam 1000 bytes.

Em qualquer caso, porém, para ter 100% de certeza de que os autores não escreveram nada que seja explicitamente errado, você deve verificar o código-fonte ou consultar o autor do programa.

Referências:

informação relacionada