簡體   English   中英

C++/CLR(C++ 互操作)基本問題 :)

[英]C++/CLR (C++ Interop) Basic Questions :)

我有一些關於 C++/CLR C++ Interop 的問題(基本上混合了 C++ 非托管和托管代碼)。

  1. 如果我使用 C++/CLR 創建應用程序並編寫非托管和托管代碼,例如:

     int main(int argc, char*argv[]) { int a = 30; int* a_ptr = &a; std::cout << a_ptr << std::endl; Console::WriteLine("This is managed code"); }

由於第 4 行是托管 .NET 代碼,它將通過 CLR。 但是前三行是否也會通過 CLR 還是會單獨處理? 如果我在 CLR 項目中只編寫 C++ 非托管代碼,它會降低性能嗎?

  1. C++/CLR 項目是否改變了 C++ 語言中的任何內容,例如原語或類似的東西?

  2. 它是如何工作的? 如果 CLR 檢測到一個命令使用它,它如何被調用......或者一切都通過它?

  1. 不。性能將是相同的。 在 C++ CLI 中,函數可以是托管的,也可以是非托管的。 並且無論一個函數是否被管理,它們都等於被 JITted 后的處理器。 因此,從本機函數到托管函數的調用與本機-> 本機、托管-> 托管沒有太大區別。 唯一的大區別發生在傳遞參數時。 根據情況,一些參數從一個世界編組到另一個世界。 如果發生這種情況,您就會失去性能。 (返回值也是如此)。 在您的示例中,沒有跨世界參數傳遞或返回,因此沒有性能開銷。

  2. 不,一切都保持不變。

  3. 從托管到非托管,它使用內部調用機制,就像 CLR 本身一樣。 從托管到非托管,它只是調用地址。 本機函數不關心它是否調用托管代碼(參數編組除外)。

暫無
暫無

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

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