概述假设我有一个遍历目录的C程序,并将目录条目元数据存储在名为dir的struct dirent *中.程序多次
访问字段dir-> d_name.我想知道设置辅助字符
指针(例如char * str = dir-> d_name)是否会使程序更快.我知道解除引用指针是一个相对昂贵的 *** 作.问题是,如果我设置一个辅助变量,我仍然会取消引用一个指针;唯一的区别是在一种情况下,我正在取消引用指向
结构的指针,而在 假设我有一个遍历目录的C程序,并将目录条目元数据存储在名为dir的struct dirent *中.程序多次访问字段dir-> d_name.我想知道设置辅助字符指针(例如char * str = dir-> d_name)是否会使程序更快.我知道解除引用指针是一个相对昂贵的 *** 作.问题是,如果我设置一个辅助变量,我仍然会取消引用一个指针;唯一的区别是在一种情况下,我正在取消引用指向结构的指针,而在第二种情况下,我正在取消引用指向字符串的指针.所以我想这里的关键问题是,访问结构的各个字段有多昂贵?我想在机器级别,这将涉及首先取消引用指向结构的指针以获取其地址,然后通过所需字段的偏移量递增该地址.在辅助指针的情况下,您将取消引用,此时您已经拥有该字符串的起始地址.解决方法 我能给你的唯一答案是它取决于.使用70年代的简单编译器(仅注意K& R C …)或每个指令编译器的手工指令,使用寄存器变量作为辅助指针可以实现真正的优化.
有了一个不错的优化编译器,事情变得非常困难.由于所谓的as-if规则,一致的编译器可以自由地重新排序或抑制任何东西,前提是可观察的行为或程序与抽象机器的程序相同,其中所有表达式都按语义指定进行求值( ref n1570 C11草案5.1.2.3程序执行).因此,对于低级优化,您只能针对具有特定选项的特定编译器对不同版本的代码进行基准测试,或控制生成的程序集(或机器)代码.问题是它可能因不同选项的不同编译器而异.这就是为什么最佳实践建议不要关心低级优化的原因,除非分析确定了瓶颈.
总结
以上是内存溢出为你收集整理的c – 直接访问指针比通过结构访问它更快吗?全部内容,希望文章能够帮你解决c – 直接访问指针比通过结构访问它更快吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
评论列表(0条)