C 数组/指针参数转换

标签 c arrays pointers memory function-declaration

我有一个用 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/

相关文章:

java - 将 JNA 指针从一个 Java 应用程序发送到另一个 Java 应用程序

c 编程将十六进制放入 char

c++ - 从 C-Style 字符串 C++ 中删除字符

php - 为什么我的数组没有用双引号将每个单词括起来?

arrays - 将值存储在数组中

c - 跳过字符串中的单词数,由一个参数指示

c++ - 在特定内存地址创建新的 C++ 对象?

c - 如何编写模块化网络代码?

C 获取我的公共(public) IP 地址

c - 检测传递指向未初始化变量的指针