我正在考虑编写一个函数,该函数使用calloc从文件中创建一个数组来存放数据(现在以字符的形式)。 根据我的理解,我最明显的两个选项是读取所有字符以获得所需的总大小,使用calloc分配所需的空间,然后使用fseek到达文件的开头,并在返回之前填充数组指向数组的指针。 第二个选项是创建一个小的初始数组,在我复制时根据需要连续添加realloc以添加块,并且在realloc faliure的情况下,在释放旧的calloc之前将所有数据传输到新的,更大的新calloc,并且一旦读完全部就返回数组指针。
问题是,realloc在大数据集中失败的可能性有多大,好像不是我想象的第二种方法在这种情况下会有所帮助。
据我所知,创建一个大型阵列然后根据需要缩小会比较棘手,所以我没有把它列为一个选项;如果我错了,请提及。
答案 0 :(得分:1)
无论您是通过记忆力不足或表现的可能性判断质量,都不需要考虑第二和第三种情况,因为第一种情况是明显的赢家。除了不读取每个角色以获得所需的总大小。使用二进制文件并寻求最终;得到位置(这将是长度),然后回到起点。这基本上是在每个可能的场景中都是瞬时的,当然也不比阅读每个角色更糟糕。当然,无论如何有效的realloc,它只比分配一次更好。如果你是按性能判断质量,那么你现在可以测试它了。