簡體   English   中英

我是否正確測試了返回值優化?

[英]Am I testing the Return Value Optimization correctly?

考慮:

struct Measures {
    char name[128]; // added in response to comments
    int   age;
    float weight;
};

Measures foo() {
    Measures res;
    cout << &res << endl;
    return res;
}

int main() {
    Measures m = foo();
    cout << &m << endl;
    system("pause");
    return 0;
}

我通過在 Visual Studio 中運行此代碼得到的輸出是:

004FFA30
004FFB28

我是否從兩個地址不同的事實得出正確的結論,即未執行返回值優化? 如果是這樣,為什么在這種情況下不執行它(我發現一些處理 Visual Studio 2017(版本 15.9.14)的帖子沒有執行返回值優化,但似乎沒有一個是關於這種特殊情況的)?

https://godbolt.org/z/FCRtY9

正如評論中所暗示的,這與結構的大小有關。 如果結構適合寄存器,則地址可能會更改。

一旦你創建了一個更大的結構,地址就保持不變。

請注意,保證會發生復制省略: https : //stackoverflow.com/a/48881336/461597

#include <iostream>
using std::cout;
using std::endl;

struct Measures {
    int   age;
    float weight;
};

struct BigMeasures {
    Measures m;
    int foo, bar, moo, mar;
};

Measures foo() {
    Measures res;
    cout << &res << endl;
    return res;
}

BigMeasures bar() {
    BigMeasures res;
    std::cout << &res << "\n";
    return res;
}

int main() {
    std::cout << "Small Measures:\n";
    Measures m = foo();
    cout << &m << endl;
    std::cout << "Big Measures:\n";
    BigMeasures bm = bar();
    std::cout << &bm << "\n";
    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM