c++ - 将可选参数传递给方法而不是计算它的成本

标签 c++ performance optimization memory

我有一个内存块,分为一系列位置,可以由客户端代码检索和返回。
返回位置的方法如下所示:

void ReturnLocation(void *address) {
    int location = AddressToLocation(address); // I need the location here
    // some code
    DoSmthA(location);
}

void DoSmthA(int location) {
    // I need the address, but also the location
    void *address = LocationToAddress(location); 
    // do something with the address
    DoSmthB(location);
}

void DoSmthB(int location) {
    // Again, I need the address, but also the location
    void *address = LocationToAddress(location);
    // do something with the address
    DoSmthC(location); // It may go on this way...
}

// ------------------------------------------------------
void* LocationToAddress(int location)
{
    return (void *)((char *)this + HEADER_SIZE + (location * LocationSize));
}

int AddressToLocation(void *address)
{
    return (int)(((__int64)address - HEADER_SIZE - (__int64)this) / LocationSize);
}  

我的问题是:我应该只将位置传递给辅助方法,还是每次都传递地址(而不是一次又一次地计算它)更快:

void DoSmthA(int location, void *address) { }  

或者更好的是使用这样的结构:

struct LocationInfo { int Location; void *Address; };
void DoSmthA(LocationInfo locInfo) { }

此方法可能会被调用数百万次,我不确定从位置计算地址的操作(两次加法和一次乘法)比传递包含地址的第二个参数更快还是更慢。

提前致谢!

最佳答案

剖析它。在您的情况下,在您的编译器上和您的代码库中,做实际上更快的事情。不是在我无关的测试中,在我无关的编译器上更快。

将参数传递给函数是一种非常便宜的操作。基本上是堆栈推送/弹出。

如果可以优化除法,计算位置可能会非常快(取决于 LocationSize 的值,以及它是否在编译时已知)。

所以尝试两者,看看在现实世界中哪个更快。

CPU 是复杂的野兽,性能并非微不足道。

关于c++ - 将可选参数传递给方法而不是计算它的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1110125/

相关文章:

c++: std::exception 的 what() 方法中的奇怪语法

c++ - 桌面/屏幕视频采集/录像库 "pc not mobile "[c++/Qt]

c++ - std::vector<int> sum ASM 解释

java - 获取位置安卓?

c++ - 为什么这个结果是62呢?

c++ - 依赖于其他 DLL 的插件 DLL

vba - 性能优化

javascript - 如何快速逐像素处理图像?

MySQL 8.0.12 关键效率在 MySQL Workbench 中为 0.0%

xcode - 在 Swift 中的 UILabel 后面的 UIImageView 中获取像素的 RGB 值或像素的平均 RGB 值