C动态分配速度问题

Jos*_*osh 2 c arrays malloc performance dynamic

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

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));
}
Run Code Online (Sandbox Code Playgroud)

问题是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;
}
Run Code Online (Sandbox Code Playgroud)

和..

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

FileTables = malloc(rows * sizeof(*FileTables));
Run Code Online (Sandbox Code Playgroud)

(是的,我修复了不必要的演员)

NPE*_*NPE 6

你可以通过两个分配和一些指针算法来逃避:

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;
}
Run Code Online (Sandbox Code Playgroud)

另外请注意,我固定在一个错误malloc(rows * sizeof(char))(该sizeof(char)sizeof(char*),因为你分配的数组的指针char).