我試圖在Visual C++中使用內聯ASM調用operator new
和operator delete
。C++和程序集:使用ASM調用'operator new'和'operator delete'
例如,我有這樣的功能:
__forceinline void __fastcall deallocate(pointer& _ptr)
{
__asm
{
mov eax, dword ptr[_ptr]
mov ecx, dword ptr[eax]
mov dword ptr[eax], 0
push ecx
call operator delete
add esp, 4
}
}
不幸的是,在編譯的時候,我得到這些錯誤:
error C2414: illegal number of operands
error C2400: inline assembler syntax error in 'first operand'; found 'bad token'
error C2400: inline assembler syntax error in 'opcode'; found 'bad token'
我知道這與調用operator delete.
如果我更換做它帶有這樣的功能:
__forceinline void _delete(pointer _ptr)
{
::operator delete(_ptr);
}
and write
call _delete
在ASM代碼部分,我沒有得到任何錯誤。有人可以告訴我爲什麼,我該怎麼辦?我不想用這個_delete
函數。如果我以類似的方式嘗試撥打operator new
,也會發生這種情況。謝謝。
你的方法的一個問題是每種類型都有一個不同的操作符刪除,彙編器如何知道你想要哪一個? – Dani 2015-04-05 11:06:35
你認爲有什麼辦法可以解決這個問題嗎? – 2015-04-05 11:39:38
我在想爲什麼你想打破C++的大會去做這個...? – 2015-04-05 12:49:47