2017-09-01 72 views
-3

我有兩個相同類型的數組(a []和b []),大小(它們的大小可以是非常大)並且具有相同的元素值。 現在用這些陣列我可以調用這兩個函數中的一個遞歸,其定義是有什麼區別兩個函數的遞歸調用,具有不同數量的數組作爲參數傳遞將具有系統堆棧

void function_1(int *a); 
void function_2(int *a,int *b); 

我想知道有什麼區別,這些函數的遞歸調用,都會對系統堆棧即會他們都需要相同的空間或者如果第二個函數需要更多的空間,遞歸調用這些函數創建的差異數量是多少。

+0

'function_1'在堆棧上傳遞1個指針; 'function_2'在堆棧上傳遞2個指針。就這樣。指針的大小通常是4或8字節(32位或64位應用程序)定義的實現。 –

+0

'function_2()'將需要比'function_1()'大兩倍的堆棧大小。 – user0042

+0

參數是指針,而不是數組。 – molbdnilo

回答

1

我想知道有什麼區別,這些函數的遞歸調用,將有系統堆棧

function_2上會用兩倍的堆棧空間爲function_1做參數。這是因爲它有兩倍的參數(相同的大小)。

+0

這兩個堆棧幀都會有一個返回指針,所以'function_2'使用的空間比'function_1'多3倍(3個機器指針而不是2) – Sylwester

+0

@Sylwester它們可以使用堆棧空間作爲函數的內部狀態。 – user2079303

+0

什麼是內部狀態? – Sylwester

相關問題