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)
(是的,我修复了不必要的演员)
你可以通过两个分配和一些指针算法来逃避:
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).