對於簽名功能:有沒有辦法讓MSVC在x64的寄存器中傳遞結構參數?
struct Pair { void *v1, *v2 };
void f(Pair p);
編譯在x64上,我想Pair
的領域通過寄存器傳遞,因爲如果函數是:
void f(void *v1, void *v2);
編譯用gcc測試4.2.1對於OSX 10.6上的x86_64,我可以看到這正是通過檢查反彙編發生的情況。但是,在Windows上使用MSVC 2008 for x64進行編譯時,反彙編顯示Pair
已在堆棧上傳遞。我知道平臺ABI可以阻止這種優化;有沒有人知道任何MSVC特定的註釋,調用約定,標誌,或其他黑客可以得到這個工作?
謝謝!
您可以將指針傳遞給結構嗎?這可能是最簡單的解決方案。 – 2010-03-25 18:37:38
也許試試'__fastcall'。我聽說它可以做註冊相關的事情。 – 2010-03-25 18:39:36
如果你傳遞一個指向結構體的指針,那麼你仍然在執行商店(以填充結構體,它將駐留在調用者的堆棧框架上)並加載(讀取字段)。在無結構的「void f(void *,void *)」情況下,可能沒有這樣的負載。 – Luke 2010-03-25 18:42:28