我在項目中大量使用內聯彙編,在編譯時我需要調用具有未知數量參數的函數,並且我管理自己使其有時在linux中工作(在Windows中,我不「T記得有這個問題),奇怪的事情是這樣發生的:內部循環中的內聯彙編
如果我有像
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」,但沒有任何改變。
的問題肯定是,「爲什麼不通過一個指針數組,而不是複製數組元素堆棧的,」還是我失去了一些東西?沿着:func(someArray,this-> someVar),然後你會得到一個性能提升以及(沒有內存移動,沒有循環) – Skizz 2010-01-13 11:17:52
我調用的功能,我沒有控制。他們在其他圖書館。我需要把他們的期望傳給他們。 – user246100 2010-01-13 11:24:44
通過在編譯器的手下執行不成對的'push'權限來更改局部變量的相對位置是非常非常糟糕的主意。 – avakar 2010-01-13 11:26:34