time 和 ulimit 命令使用的千字节是 1000 (SI) 还是 1024 (老式) 字节?

time 和 ulimit 命令使用的千字节是 1000 (SI) 还是 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按照ulimitIEC 建议执行,或者在千字节含义中使用“千字节/千字节”

答案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 个 SI 单位。

由于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详细解释了这一点,但从单位政策

答案2

不,千字节是 1000。我们遵循国际单位制因此前缀“kilo”指的是 1000 而不是 1024。任何其他引用都是错误的。

1024 是千字节沒有)

从 ulimit -a:

最大内存大小(kbytes,-m)无限制

我认为这是一个错误。它应该明确说明千字节或基比,而不是千字节

人工时间:

M 进程生命周期内的最大驻留集大小,以千字节为单位。

  • 限制使用 KIBIbytes

    limit.rlim_cur = newlimit * 512;
    limit.rlim_max = newlimit * 512;
    
  • GNU 时间如果你查看源代码,就会发现 usus KIBIbytes。手册是错误的。

    它用:

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

答案3

A千字节为 1000 字节(SI 前缀表示千)。千字节为 1024 字节(IEC 前缀表示千二进制)。

这个惯例自 1998 年以来一直使用,但我猜测这些前缀的使用并不像它们应该的那样广为人知。

这也是为什么 1 TB(太字节)硬盘只有 0.91 TiB(太字节,文件系统报告)。

一个相关的问题是,当作者声明给出一个数字时“千字节”由于这不是正式声明,所以你不知道他们的意思到底是这个还是那个。

由于ulimit帮助页面显示:“值以 1024 字节为增量”我相信可以安全地假设它们确实意味着千字节当他们写作时千字节

另一方面,由于man time明确指出价值观千字节,人们必须假设作者知道千字节是多少,并且他们实际上指的是 1000 字节。

然而,无论如何,为了 100% 确定作者没有写任何明显错误的内容,您应该检查源代码或咨询程序的作者。

参考:

相关内容