gpt4 book ai didi

C 动态分配速度问题

转载 作者:行者123 更新时间:2023-12-02 00:02:27 27 4
gpt4 key购买 nike

我正在使用这段代码动态创建一个二维数组:

char **FileTables;
int rows = 1000;
int i;

FileTables = (char**)malloc(rows * sizeof(char));
for (i = 0; i < rows; i++) {
FileTables[i] = (char*)malloc(256 * sizeof(char));
}

问题在于 1000 行,而且可能更多,分配所有内存需要几秒钟。有没有更快/更好的方法来做到这一点?

编辑:除了明显更简单的代码之外,使用其中一种方法优于另一种方法是否有优势?

char **FileTables;
int rows = 1000;
int i;

FileTables = malloc(rows * sizeof(char*));
FileTables[0] = malloc(rows * 256 * sizeof(char));
for (i = 0; i < rows; i++) {
FileTables[i] = FileTables[0] + i * 256;
}

还有..

char (*FileTables)[256];
int rows = 1000;

FileTables = malloc(rows * sizeof(*FileTables));

(是的,我修复了不必要的转换)

最佳答案

你可以只用两次分配和一些指针运算就可以逃脱:

int rows = 1000;
int cols = 256;
char *data;
char **FileTables;
int i;

data = malloc(rows * cols);
FileTables = malloc(rows * sizeof(char*));
for (i = 0; i < rows; i++) {
FileTables[i] = data + i * cols;
}

另请注意,我修复了 malloc(rows * sizeof(char)) 中的一个错误(sizeof(char) 应该是 sizeof(char*) ,因为您正在将 指针 数组分配给 char)。

关于C 动态分配速度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7390956/

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