2
我有一個通用的解決問題的用C語言編寫的是採用值數組和解決它就地。該問題作爲一個固定大小的數組,然後傳遞給一個求解函數。切換到使用指針而不是固定大小的數組時,遇到了一個奇怪的性能問題。C中的數組/指針參數轉換
設置代碼如下:
int main() {
int board[256];
...
int *board2 = malloc(sizeof(int) * 256);
memcpy(board2, board, 256);
int result = solve_board(___);
}
我已經測試了以下聲明和電話(沒有其他有關程序的修改):
// type 1 - fixed-size array
int solve_board(int board[256]);
solve_board(board); // 1.167 seconds
solve_board(board2); // 3.760 seconds
// type 2 - pointer
int solve_board(int *board);
solve_board(board); // 1.173 seconds
solve_board(board2); // 3.529 seconds
solve_board
是部分遞歸的,因此呼叫在執行期間犯了很多次。結果對所有情況都是準確的。
任何人都可以解釋爲什麼使用動態數組需要這麼比沿着固定大小的數組經過更長的時間?