【发布时间】:2020-03-11 00:49:10
【问题描述】:
在过去的几年里,我已经讨论过十几次写这个问题。主要是因为我不确定这是否重要。我正在寻找最技术性的答案,因为表面上我知道这并不重要。
您常用的编程语言为您提供了一些方法来确定数组/列表/集合的大小,使用数组上的字段(即 C# 的 arr.Length)或传递数组的函数(即 Go 的 len(arr) ) 并且通常使用其中一种方法来检查数组是否为空或其中是否有任何值。你并不关心有多少,只要列表是否为空。
在检查数组是否为空时,我在以下之间来回徘徊:
if (arr.Length != 0) { /* do something with the array */ }
和
if (arr.Length > 0) { /* do something with the array */ }
毫无疑问,两位操作员都能胜任。因为你不能有一个负长度的数组(至少不是我所知道的任何语言),所以他们没有办法表现得不同。两者都没有明显的开销。
如果(一个很大的如果)这两者之间有任何区别,我想它会在一个或两个时钟周期的数量级上,但我对低级事件的了解不够,没有任何理由支持一个胜过其他。
出于好奇,在任何流行语言中,它们之间是否有最细微的区别?运行速度有什么不同吗?编译时间?二进制大小?从字面上看,除了作为输出二进制文件中的不同操作码之外还有什么?解释型语言和编译型语言会有什么不同吗?
【问题讨论】:
标签: arrays optimization language-agnostic