gpt4 book ai didi

c - 重复取消引用多个指针,效率较低?

转载 作者:行者123 更新时间:2023-12-03 03:13:24 24 4
gpt4 key购买 nike

而不是写:

string name = first->next->next->next->name;
int age = first->next->next->next->age;

写成:

node* billy_block = first->next->next->next;

string name = billy_block->name;
int age = billy_block->age;

效率更高吗?变量 billy_block 是否有可能被编译器“优化掉”?

我不懂编译器,所以请使用简单的术语。

最佳答案

任何有自尊心的现代编译器都会优化原始代码,以消除在安全的情况下重复取消引用同一指针链。

但是,首先,原始版本的代码的可读性比使用中间变量的版本要差得多。当指针解引用链很长时,人眼并不能立即明显看出这些链是相同的。带有中间变量的变体明确表明我们想要从同一个对象读取nameage。在第一个变体中,它甚至远没有那么清晰。

其次,在别名图片对编译器来说不像您的情况那样明显的情况下,编译器可能不得不放弃优化。例如。一般情况下,当您执行类似

的操作时
some_ptr->next = first->next->next->next->next;
some_ptr->prev = first->next->next->next->prev;

编译器无法确定第一个赋值不会影响first->next->next->next的值。 (考虑一下如果 some_ptr 等于 first 会发生什么。)这会迫使编译器谨慎行事并重新评估 first->next->next->next 每次从一开始。在这种情况下引入中间变量确实会优化代码。当然,为此,您自己必须确保这是正确的做法,即使用您自己对程序中可能出现的别名的了解。

关于c - 重复取消引用多个指针,效率较低?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261251/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com