Beträgt das von den Befehlen „time“ und „ulimit“ verwendete Kilobyte entweder 1000 (SI) oder 1024 (alte Schule) Byte?

Beträgt das von den Befehlen „time“ und „ulimit“ verwendete Kilobyte entweder 1000 (SI) oder 1024 (alte Schule) Byte?

Aus man time:

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

Aus ulimit -a:

max memory size         (kbytes, -m) unlimited

Aber ein"Kilobyte" kann entweder 1000 oder 1024 Byte bedeuten. Ich schätze, hier sind es rund 1024, aber ich möchte sicher sein. Eine verbindliche Referenz wäre wünschenswert.

Sie können meine Frage gerne wie folgt umformulieren:entsprechen timeund ulimitdie IEC-Empfehlung einhalten, oder "Kilobyte/Kbyte" in der Kibibyte-Bedeutung verwenden.

Antwort1

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

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

Die Ausgabe für lswird weiter in der Quelle gesichertHierUndHier.

Es scheint, als ob der einzelne Buchstabe die 1024-Messung ist. Die beidenZifferZeichenabkürzungen sind die 1000 SI-Einheiten.

Da ulimites in Bash eingebaut ist, ist der Weg zu ihrer Quelle die endgültige ... Quelle. Ich bin oft witzig, aber Sie können es sehenHierUndHier:

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.

Ihre Version ist wahrscheinlich älter als bash-5.2-rc3, was in Ordnung ist, da sich die Größe dieses Elements seit der Veröffentlichung von 4.0.38 mindestens im letzten Jahrzehnt nicht geändert hat. Sie können es sehenHierUndHier.

Edit: die man page für units.7erklärt das im Detail, aber es scheint ziemlich chaotisch zu sein von derEinheitenRichtlinie.

Antwort2

Nein, Kilobyte sind 1000. Wir folgen demInternationales EinheitensystemDas Präfix „Kilo“ bezieht sich also auf 1000 und nicht auf 1024. Alle anderen Angaben sind falsch.

1024 istKibibyte(kisieheBikeine)

Von ulimit -a:

maximale Speichergröße (kByte, -m) unbegrenzt

Das halte ich für einen Fehler. Es sollte explizit Kilo oder Kibi angegeben werden, nicht KBytes.

Mannzeit:

M Maximale Resident Set-Größe des Prozesses während seiner Lebensdauer in Kilobyte.

  • ulimitverwendet KIBIbytes

    limit.rlim_cur = newlimit * 512;
    limit.rlim_max = newlimit * 512;
    
  • GNU-Zeitusus KIBIbytes, wenn Sie sich die Quelle ansehen. Das Handbuch ist falsch.

    Es benutzt:

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

Antwort3

AKilobytebeträgt 1000 Bytes (SI-Präfix bedeutet Tausend). Einkibibytebeträgt 1024 Bytes (IEC-Präfix bedeutet Kilobinär).

Diese Konvention wird seit 1998 verwendet, aber ich vermute, dass die Verwendung dieser Präfixe nicht so bekannt ist, wie sie sein sollte.

Aus diesem Grund ist eine 1-TB-Festplatte (Terabyte) auch nur 0,91 TiB (Tebibyte, laut Dateisystem) groß.

Ein damit verbundenes Problem ist, wenn Autoren angeben, dass eine Zahl angegeben ist in"kByte". Da es sich nicht um eine offizielle Erklärung handelt, wissen Sie nicht, ob das eine oder das andere gemeint ist.

Da die ulimitHilfeseite sagt:„Werte sind in 1024-Byte-Schritten angegeben“Ich glaube, man kann davon ausgehen, dass sie tatsächlich bedeutenKibibytewenn sie schreibenKB.

Andererseits, da man timeausdrücklich erklärt wird, dass Werte inKilobytemüsste man davon ausgehen, dass die Autoren wissen, was ein Kilobyte ist und dass sie tatsächlich 1000 Bytes meinen.

Um jedoch in jedem Fall 100% sicher zu sein, dass die Autoren nichts explizit Falsches geschrieben haben, sollten Sie den Quellcode überprüfen oder den Autor des Programms konsultieren.

Verweise:

verwandte Informationen