4
我想要做一些模擬和數學操作,這些操作是高度遞歸的,在某些邊緣情況下,我溢出了調用堆棧並獲得EXC_BAD_ACCESS信號。將算法更改爲迭代形式是不可行的,因爲它是很多遺留代碼。遞歸深度限制不會有用,因爲內存的使用是非確定性的。如何在EXC_BAD_ACCESS遞歸算法保護IOS
有沒有辦法來檢測可用堆棧的數量,所以我可以優雅地取消操作?
是否有可能實現一種類型的堆疊金絲雀,我可以連續檢查未被覆蓋?
我想要做一些模擬和數學操作,這些操作是高度遞歸的,在某些邊緣情況下,我溢出了調用堆棧並獲得EXC_BAD_ACCESS信號。將算法更改爲迭代形式是不可行的,因爲它是很多遺留代碼。遞歸深度限制不會有用,因爲內存的使用是非確定性的。如何在EXC_BAD_ACCESS遞歸算法保護IOS
有沒有辦法來檢測可用堆棧的數量,所以我可以優雅地取消操作?
是否有可能實現一種類型的堆疊金絲雀,我可以連續檢查未被覆蓋?
如果線程安全不是問題,請使用靜態變量。事情是這樣的:
int recurse(int something) {
static int depth = 0;
++depth;
if (depth > MAX_DEPTH) { // bail }
...
int result = recurse(...);
--depth;
return result;
}
如果線程安全是一個問題,你可以通過depth
作爲參數。
你有沒有想過呢,因爲我有同樣的問題,不知道如何解決它 – Levi