考虑到今天的处理器,代码膨胀是否不再重要?
Does code bloat matter anymore given today's processors?
例如,假设您在一个非常大的软件中使用完全限定的名称空间,而不是别名或"using"语句。假设你输入了各种不需要的废话,当你的目标被执行时,你的数组不会停止迭代,等等。这些类型的代码效率低下会影响今天软件的执行速度吗?
如果"代码膨胀"指的是可读性较差且不必要复杂的代码,那么"代码膨胀"的主要代价是开发时间较长,而不是代码速度较慢。这并不意味着在效率方面永远不会有成本,但有时更干净的代码会更慢。所以,我想说,代码膨胀并不一定意味着代码更慢或更快,只是不可读性会阻止人们以高性能的方式进行编码,因为理解代码和优化性能的障碍更高。
如果你所说的代码膨胀是指算法效率,那可能取决于你在做什么。对于大型数据集,性能曲线为O(e^n)的东西会很慢,无论你的处理器有多快。也就是说,我通常基于n的大小。如果我知道我的数据集会很小(一个有7个项目的硬编码下拉菜单),那么如果我在O(log(n))中进行线性搜索O(n)而不是二进制搜索,我就不会那么担心了。但如果可能的话,我通常倾向于做得更快。
如果我说的是希腊语,请使用Big-O符号:https://en.wikipedia.org/wiki/Big_O_notation
程序中使用的字符数(甚至不是LOC)通常不会显示出复杂性。因此,我们不能说它对总吞吐量的影响,至少在一般情况下是这样。然而,更准确地说,你的程序的复杂性在今天甚至在未来都不重要。请考虑一下,我们的需求随着我们的能力而增加。如今,我们面临着大数据,这个术语的意思是数千TB,但大约15年前,这种规模的数据令人难以置信。
看看这两个片段:
//Block 2 - O(1)
int abcdef1;
int abcdef2;
//...
int abcdef100000;
//----------------
//Block 2 - O(n^2)
for (int i=0; i < n; i++)
for (int j=0; j < n; j++)
//do something
//----------------
很明显,字符的数量并不是衡量复杂性的代表性指标。欲了解更多详细信息,请访问:
- 八岁孩子的大O
- http://en.wikipedia.org/wiki/Big_O_notation(如前所述)
- 您是否在';真实世界'
- 什么是大O符号?你用它吗
- 大O表示法在计算机科学中有什么大不了的
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- 如果我从流中提取某些内容,该流是否不再包含我提取的内容?
- 是否可以将移动的变量标记为不再可用,并在使用它时收到编译器警告?
- 由于 C++17 支持数组shared_ptr,这是否意味着在 ctor 和重置中不再需要 T[] 的显式删除器?
- 在不再满足条件后,while 循环是否停止验证?
- 如何判断 std::vector 是否调整了自身大小,以及如何解释指向向量内值的指针不再有效
- 考虑到今天的处理器,代码膨胀是否不再重要?
- 迁移到 vtk6:是否不再需要 Update() (不再)
- 检查指向自定义类的指针是否不再存在
- 如果左值不再在其定义范围内使用,编译器是否允许将左值转换为右值引用
- 如果某个条件语句中的某些内容导致该条件语句不再为true/false,则该语句是否停止执行
- 字符串::c_str() 是否不再以 C++11 结尾的空值