__declspec(naked) void printfive() {
int i = 5;
printf("%i\n", i);
}
由於某些原因,此代碼有效,但我不明白i
存儲在哪裏?在調用函數的框架中?它變成全球變量?如果它存儲在調用者的框架中,那麼編譯器如何知道位移,因爲您可以使用具有不同幀大小和局部變量的不同函數調用printfive()
。如果它是全球性的,或者像static
也許,我試圖去遞歸,我可以看到變量沒有改變,它確實不是真正的本地。但很明顯,沒有入門代碼(序言)。好吧,我明白,沒有序言,沒有框架,沒有寄存器改變,但這是值,但範圍?此說明符的行爲是否在任何參考中定義?無論如何,這是C++標準的一部分嗎?如果你主要在裏面使用asm {}
(或者使用asm來調用它們,並希望確保函數沒有被優化),那麼這種功能非常棒,但是你可以和C++混合使用。但這是一種令人費解的情緒。函數聲明__declspec(naked)如何存儲局部變量?
你使用什麼編譯器? –
「無論如何,這是C++標準的一部分嗎?」不,你究竟想要達到什麼目標?你的目標是什麼?你爲什麼希望編寫一個沒有序言/ epilog的函數? –
我正在實現類似於第四種線程的代碼語言,每個原語都是彙編程序或C函數。大多數是asm,但有時C代碼更容易閱讀,裸函數並不是註冊表。 – exebook