gpt4 book ai didi

C 数组/指针参数转换

转载 作者:行者123 更新时间:2023-12-04 05:54:49 25 4
gpt4 key购买 nike

我有一个用 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 是部分递归的,因此在执行期间会进行大量调用。所有情况下的结果都是准确的。

谁能解释为什么使用动态数组比传递固定大小的数组花费的时间长得多?

最佳答案

很有可能是这个问题:

memcpy(board2, board, 256);

这会将 256 个字节,而不是整数,从一个数组复制到另一个数组。你可能是说:

memcpy(board2, board, 256 * sizeof(int));

所以您的两个测试用例没有在相同的数据上运行。 board2 的剩余 (256 * (sizeof(int) - 1)) 个字节未初始化并且具有垃圾(= 未定义)值。

关于C 数组/指针参数转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21993932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com