CRI*_*IMX 0 c c++ programming-languages
我正在阅读lcc的源代码,在alloc.c:
if ((ap->next = freeblocks) != NULL) {
freeblocks = freeblocks->next;
ap = ap->next;
}
Run Code Online (Sandbox Code Playgroud)
为什么不
if (freeblocks != NULL) {
ap->next = freeblocks;
freeblocks = freeblocks->next;
ap = ap->next;
}
Run Code Online (Sandbox Code Playgroud)
后者会造成额外费用吗?
您发布的代码段在功能上不相同.
第一个分配freeblocks给ap->next,如果不是NULL,则继续其他两个陈述.
您提议的第二个,如果是freeblocks 则不分配freeblocks,在这种情况下实际上什么也不做.这不一样.ap->nextNULL
您可以将提案更改为以下内容,这在功能上是等效的:
ap->next = freeblocks;
if (freeblocks != NULL) {
freeblocks = freeblocks->next;
ap = ap->next;
}
Run Code Online (Sandbox Code Playgroud)
这避免了一些人认为不好的风格的分配条件.假设您在编译时表示执行速度或代码大小,则不太可能导致任何额外的"成本".
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |