c – 索引与指针
我正在使用元素数组,其中许多元素相互引用,我假设在这种情况下使用指针更有效.
但在某些情况下,我需要知道我有指针的元素的索引.例如,我有p =& a [i],我需要知道i的值.据我了解,我可以通过p – a计算出来.但是这种操作固有地涉及分割,这是昂贵的,而从数组索引计算地址涉及乘法并且更快. 所以我的问题是,在需要索引的情况下是否使用指针进行交叉引用甚至是值得的? 解决方法
仅当元素的大小不是2的幂时,即当它不是指针时,或者在大多数系统上的某种标准类型时,该操作才需要除法.使用比特移位除以2的幂,这是非常便宜的.
这里适用相同的逻辑,除了编译器向左移动而不是向右移位.
在没有分析的情况下计算CPU周期是过早优化的一个例子 – 在开始设计时要考虑的一件坏事. 更重要的考虑因素是索引更加健壮,因为它们经常在数组重新分配后继续存在. 考虑一个例子:假设有一个数组在向后添加元素时动态增长,该数组的索引和指向该数组的指针.你向数组添加一个元素,耗尽它的容量,所以它现在必须增长.你调用realloc,并获得一个新的数组(如果在“官方”结束后有足够的额外内存,则获得一个旧数组).你持有的指针现在无效;但是,索引仍然有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |