【发布时间】:2021-07-21 02:02:28
【问题描述】:
我正在尝试制作这样的数组:
char tmp[4][32768];
//code
这是在一个函数中,我发现将这个数组设为全局会提高程序的速度(不幸的是,我无法保持这样的状态,因为函数在遇到某些数据时会递归调用自身)。我想让这个功能更快,但我读到malloc 可能会很慢。那么是这样留下还是这样做会更快吗?:
char** tmp;
tmp = malloc(4 * sizeof(char*));
tmp[0] = malloc(32768);
tmp[1] = malloc(32768);
tmp[2] = malloc(32768);
tmp[3] = malloc(32768);
//code
free(tmp[0]);
free(tmp[1]);
free(tmp[2]);
free(tmp[3]);
free(tmp);
【问题讨论】:
-
无法确定。您需要进行基准测试
-
tmp = malloc(4);分配不足。你需要做tmp = malloc(4 * sizeof (char *)); -
@mediocrevegetable1 谢谢我忘了那个大声笑(我更新了帖子)
-
如果你在一个关键代码中并且你的函数不是递归的,你可以在堆中预先分配一个大的线程本地缓冲区来减少执行 mallocs 的成本(但不要忘记释放它) .
-
你的递归有限制吗?然后有一个简单的方法来解决堆栈分配问题。如果没有 - 您可以通过根据需要分配新数组来全局管理这些数组,并且在退出时只释放一次。最大分配数将是您的递归数。
标签: c performance memory