- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 bash 脚本、node.js 和 C 的组合为 ARM 系统开发多个应用程序。我在开发时使用注释来跟踪代码中发生的事情或停用实际代码。
我的经验是,每个额外的内存指针和处理器周期都会减慢系统速度。
我应该为了优化而删除生产代码中的所有注释还是不值得担心?
最佳答案
正如其他答案所提到的,c 没有区别。 (或任何其他编译的)代码。
这可以证明如下:
$ touch 0comments.c
$ time gcc -c -o 0comments.o 0comments.c
real 0m0.022s
user 0m0.009s
sys 0m0.009s
$ seq -f '/* This is comment %g */' 1000000 > 1000000comments.c
$ time gcc -c -o 1000000comments.o 1000000comments.c
real 0m0.163s
user 0m0.135s
sys 0m0.021s
$ cmp 0comments.o 1000000comments.o
$
生成了两个 .c 文件——一个是空的,另一个有 1000000 条评论,然后编译。比较生成的对象,没有显示出差异。
请注意编译时间确实增加了,尽管每条评论增加的时间非常微不足道,所以除非在最极端的情况下,否则应该不是问题。
与 bash ,我无法衡量循环中评论的任何显着差异:
$ time for i in {0..1000000}; do
> :
> done
real 0m4.054s
user 0m4.006s
sys 0m0.049s
$ time for i in {0..1000000}; do
> :
> # This is a comment
> done
real 0m4.047s
user 0m3.999s
sys 0m0.048s
$
...尽管可能有更严格的测试用例。
每当bash必须解析任何类型的循环,它需要在执行循环之前解析整个循环(因此它知道在哪里重定向输出等)。我怀疑注释在此解析过程中被删除,因此它们不会在每次循环迭代中都被重新解析。
但是,如果注释不在任何类型的循环(或可能函数)中,则解析时间很短,但可以测量:
$ seq -f "# This is comment %g" 1000000 > 1000000comments
$ chmod +x 1000000comments
$ time ./1000000comments
real 0m1.675s
user 0m1.468s
sys 0m0.207s
$ touch 0comments
$ chmod +x 0comments
$ time ./0comments
real 0m0.001s
user 0m0.000s
sys 0m0.001s
$
不知道 node.js ,尽管与任何解释性语言相似,但除了在最极端的情况下,它可能几乎没有或没有区别。
底线是 - 请不要删除您的评论 - 它们存在是有充分理由的。如果你删除它们,你代码的 future 维护者(可能包括你)将永远诅咒你的名字。 ;-)
关于c - 注释是否消耗内存和/或使用周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21121787/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!