c++ - 访问指针的速度

标签 c++ performance pointers

我正在重写我在学校学到的所有数据结构作为练习,以加强我对计算机科学基础知识的理解,但我正在尝试优化我年轻时创建的幼稚实现。

这引出了一个问题:

我的链表实现中有这几行,其中两种变体都使用了 temp ...

Node<T> *temp = head;

if(temp == nullptr) {
    ...
}

... // temp used here

我的链表也有一个属性long listSize,所以上面这行类似于

if(!listSize) {
   ...
}

... // temp used here, too.

这是显而易见的。 (对我而言)不太明显的是,对于计算机来说,哪一个会更快。

根据我对指针的(少量)了解,对它们的任何操作都相当昂贵,这使我相信前者可能不如后者最优;但是,我并不完全确定。

谁能帮我解决这个细微差别?

谢谢, 埃里普

编辑

发布此消息后,我决定进行一项实验。我决定第一个实现method2,第二个实现method1。我在大小从 10M 到 1B 的对数输入上运行了几次,总的来说,method2method1 快(虽然不多 - 区区 1us)。

经过一番思考,我认为这是有道理的,因为指针在我的体系结构中是 8 字节的,与 long int 的大小相同。因此,与 NULL 的比较应该是一个非常相似的过程,并且可能需要大约相同的时间。

最佳答案

From what (little) I understand about pointers, any operation with them is fairly expensive

这在一般情况下是不正确的:虽然间接级别(即通过指针访问某些东西)确实有成本,但现代硬件将其优化到除了最极端之外你无法分辨的程度个案。积极的缓存使这种差异变得更小,因此将间接访问称为“相当昂贵”是不准确的。

但是,在您的情况下,它甚至比这更简单:根本没有间接寻址!您正在检查指针本身的值,而不是它指向的任何值,因此检查指针和检查长度之间几乎没有区别。一个指针可能是 8 个字节,而长度可能是 4 个字节,但您无法在现代 CPU 上区分时间差异。

关于c++ - 访问指针的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29248388/

相关文章:

c++ - 偏函数模板特化

css - 手机背景图片

C++ 分配一个变量指针地址

c++ - 使用类型转换在 C++ 中返回二维数组

c++ - 为什么 "gdb"会打印特定类的类方法?

c++ - MailSlot写发送同样的东西三次C/C++

c++ - 无法正确从文件中获取内容

php - PHP 函数的 Big-O 列表

python - 将 matlab.double 数组转换为 python 数组

c - 指针语法查询