【问题标题】:constant pointers C++ and optimization, are they faster?常量指针 C++ 和优化,它们更快吗?
【发布时间】:2013-07-25 12:06:07
【问题描述】:

如果

  • 常量指针比普通指针快还是慢? (常量指针是一个不能改变其地址的指针)声明为 int* const x;
    • 指向常量 int 的指针比指向 int 的指针快吗?常量 int *x;
    • 指向常量 int 的常量指针比指向 int 的指针快吗?例如 int 常量 * 常量 x;整数* y; ...那么,x 会比 y 快吗? (如果它们用于数组索引)

干杯,

【问题讨论】:

  • 我还没有看到一个非人为的例子,这是演员表。实际上,我什至无法快速想出一个人为的。

标签: c++ arrays performance pointers constants


【解决方案1】:

它们可能更快,但不一定必须如此。
底线是使用 const 正确性来防止诚实的程序员犯错误并使您的代码更直观,而不是提高性能。大多数现代编译器会自动处理它。

【讨论】:

  • 好吧,我正在从一个对象中提取一个指针来玩它(我知道这是一种不好的编程习惯,但是,这是我确保更高效率的唯一方法);因此,我正在考虑使用 const 。但是,如果这会妨碍性能,我可能会省略它(const)如果我可以使用非常量指针获得更快的速度。当然,我必须非常小心指针。正如我所说,它指向堆中分配的一个大数组。
【解决方案2】:

通常,编译器不会“注意”某事物是否为const,它使用其他启发式方法来确定指针在使用之间是否需要重新加载。

当然,如果您有一个将指针作为参数的函数,那绝对没有区别。如果你有一个你使用的全局变量,那么编译器可能会考虑“好吧,它是const,所以我不会每次都重新加载它”。但它不太可能真正产生影响。指针的并行更改无论如何都是UB(您应该为此使用原子变量)。如果在代码中间调用了一个函数,并且编译器不能内联[或“跟随”]该函数,它很可能无论如何都必须重新加载指针。

【讨论】:

    猜你喜欢
    • 2010-10-15
    • 1970-01-01
    • 2021-10-02
    • 2020-10-23
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多