2015-10-27 71 views
0

我正在尋找優化一些C#代碼,我很好奇,如果我的優化器將執行任何copy elision,如果是這樣的話。我一直無法通過Google搜索找到任何有關此信息。如果不是,我可能想切換我的方法通過引用採用結構參數。我所關心的環境是Unity 3D,這很奇怪,因爲它使用Mono 2.0 Runtime或Unity的IL2CPP transpiler(我應該直接詢問它們,因爲它是封閉源代碼)。但是,將Microsoft的優化器知道爲好吧,如果標準一般允許這種類型的優化。注意:如果這不被優化器支持,如果我可以得到與C++ const ref等價的but it appears this doesn't exist,那將是非常好的。C#優化器是否執行copy elision?

回答

1

我可以說IL2CPP,並說它沒有做任何事情參考結構參數。即使沒有訪問IL2CPP源代碼,你可以通過檢查生成的C++代碼來看到這一點。

請注意,C#結構由C++結構體表示,並且該C++結構體按值傳遞。我們已經討論過在這種情況下使用const引用的可能性,但是我們還沒有實現(我們可能永遠也不會)。

+1

如果您使用IL2CPP,輸出目錄將根據平臺而有所不同。例如,在iOS上,您可以在Class/Native目錄中的輸出Xcode項目中找到生成的代碼。看看這個博客文章瞭解更多詳情:http://blogs.unity3d.com/2015/05/13/il2cpp-internals-a-tour-of-generated-code/ –

+0

謝謝!實際上,在這種情況下,可能會出現複製elision,因爲現代C++優化器如果確定即使不通過const ref傳遞它也不會產生副作用,則可以執行此操作。它可能會或可能不會發生取決於優化級別和您使用的優化器/標準(並且C++ 11允許[進一步優化](http://en.cppreference.com/w/cpp/language/copy_elision)通過使用在某些情況下移動構造函數而不是複製構造函數)。但通常這對於性能來說是個好消息!我不知道我可以檢查中級C++ ...我在哪裏可以找到它? – Eliot