c - memcpy 花费的时间在某个点后减少

标签 c malloc memcpy

我有一个代码可以按指数方式增加内存(由指针标识)的大小。
我使用 malloc() 代替 realloc(),然后使用 memcpy()...

int size=5,newsize;
int *c = malloc(size*sizeof(int));
int *temp;

while(1)
{
   newsize=2*size;
   //begin time
   temp=malloc(newsize*sizeof(int));
   memcpy(temp,c,size*sizeof(int));
   //end time
   //print time in mili seconds
   c=temp;
   size=newsize;
}

因此,被复制的字节数呈指数增长。

这个任务所需的时间也随着大小的增加几乎呈线性增加。然而,在某个点之后,所用时间突然减少到一个非常小的值,然后保持不变。

我记录了类似代码的时间,复制了我自己类型的数据。

5 -> 10  - 2 ms  
10 -> 20  - 2 ms  
.  
.  
2560 -> 5120 - 5 ms  
.  
.  
20480 -> 40960 - 30 ms  
40960 -> 91920 - 58 ms  
367680 -> 735360 - 2 ms  
735360 -> 1470720 - 2 ms  
1470720 -> 2941440 - 2 ms

时间下降的原因是什么?当大小很大时,是否会调用更优化的 memcpy 方法?

最佳答案

由于您的代码不会在旧内存块上执行 free(),因此请确保新分配不会开始失败。可能是 memcpy() 在给定 NULL 指针时出错,因此很快完成。

关于c - memcpy 花费的时间在某个点后减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9975375/

相关文章:

c - 静态结构变量段错误

c - C 中的浮点错误

c - 如何避免 C GTK 中的内存泄漏(使用 libxml)

c - 如何将字符串转换为C语言源代码

c - 内存碎片

c - 使用 memcpy 将结构复制到堆中

C 中的复合语句表达式

c - 二进制搜索树 malloc 没有为后续节点提供足够的内存

c++ - 对 delete[] 的 Malloc 调用在 TotalView 中显示为内存泄漏

C++类成员和内存位置