我找到了以下函数here,希望在MinGW下编译它:

size_t stackavail()
{
    static unsigned StackPtr;
    __asm mov [StackPtr],esp
    static MEMORY_BASIC_INFORMATION mbi;
    VirtualQuery((PVOID)StackPtr,&mbi,sizeof(mbi));
    return StackPtr-(unsigned)mbi.AllocationBase;
}

我试图修改上面的代码,并设法编译和运行它:
size_t stackavail()
{
    static unsigned StackPtr;

    __asm__ ("movl %%esp, %0\n\t" : "=r" (StackPtr) );
    MEMORY_BASIC_INFORMATION mbi;
    VirtualQuery((PVOID)StackPtr, &mbi, sizeof(mbi));
    return StackPtr-(unsigned)mbi.AllocationBase;
}

但我不确定。对吗?还有别的办法吗?

最佳答案

你可以去掉内联的ASM,使用

void* StackPtr = &StackPtr;

关于c++ - 将Visual C/C++内联汇编代码转换为GCC等效代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21266802/

10-12 16:05