我在一个项目中大量使用内联汇编,在该项目中我需要在编译时调用具有未知数量参数的函数,而我自己管理自己让它工作,有时,在 linux 中(在 Windows 中我不记得有这个问题)像这样奇怪的事情发生了:
如果我有类似的东西
for(int i = 1; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
有用。
如果我有
for(int i = this->someVar; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
我用我的生命保证 someVar 保持值 1 它会引发分段错误。
另外,如果我有
int x = 1;
for(int i = x; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
它有效,但
int x = this->someVar;
for(int i = x; i >= 0; i--)
asm("push %0"::"m"(someArray[i]));
才不是。
另外,奇怪的是,我可以说,虽然在某些功能中我没有问题,但在我拥有的其他功能中,都在同一个对象中。
如果有人可以向我指出一些可以解决问题所在的信息,我将不胜感激。
请注意,我确实必须在 for 循环中推送参数,因此避免它不是一种选择。
我也尝试使用内联汇编词“volatile”,但没有任何改变。