Performance memcpy()的速度受malloc()不同方式的影响很大

Performance memcpy()的速度受malloc()不同方式的影响很大,performance,gcc,malloc,memcpy,cpu-cache,Performance,Gcc,Malloc,Memcpy,Cpu Cache,我编写了一个程序来测试memcpy()的速度。然而,内存的分配方式对速度有很大影响 代码 时间./test.test 0 4 real 0m0.422s user 0m0.420s sys 0m0.000s 此问题与上一个问题相关: 更新 原因与GCC编译器有关,我使用不同版本的GCC编译并运行此程序: GCC版本-----------------4.1.3-----------4.4.5-----------4.6.3 所用时间(1)---0m0.183s---0m0.128s

我编写了一个程序来测试
memcpy()
的速度。然而,内存的分配方式对速度有很大影响

代码 时间./test.test 0 4

real    0m0.422s
user    0m0.420s
sys 0m0.000s
此问题与上一个问题相关:

更新 原因与GCC编译器有关,我使用不同版本的GCC编译并运行此程序:

GCC版本-----------------
4.1.3
-----------
4.4.5
-----------
4.6.3

所用时间(1)---
0m0.183s
---
0m0.128s
---
0m0.110s

所用时间(0)---
0m1.788s
---
0m0.422s
---
0m0.108s


GCC似乎变得越来越智能。

malloc返回的特定地址是由实现选择的,并不总是最适合使用代码。您已经知道,移动内存的速度在很大程度上取决于缓存和页面效果


在这里,特定的指针malloced是未知的。您可以使用
printf(“%p”,ptr)
将它们打印出来。然而,已知的是,对于两个块只使用一个malloc肯定可以避免两个块之间的页面和缓存浪费。这可能已经是速度差异的原因。

奇怪的是,我无法在gcc 4.6.3上重现这个结果(在这两种情况下我都得到了~0.400)。你确定你没有切换参数并运行1k以上吗?@lee或者我确定它运行4KB以上,同样的结果只会在我的笔记本电脑和服务器上重复出现4KB以上。两个CPU都有一个32KB的L1d 8路关联缓存。@或者我猜它与
GCC
编译器有关。当我将GCC版本更新到4.6.3时,两个案例的时间是相同的。很难相信“time./test 0 4”比“time./test.test 1 4”花费的时间更少。我的测试表明,GCC4.6的情况并非如此。3@VikramSingh您能给出这两种情况的确切时间吗?当
type==1
时,两个缓冲区连续分配,
type==0
,两个缓冲区之间有16个字节的间隙。
real    0m0.128s
user    0m0.120s
sys 0m0.000s
real    0m0.422s
user    0m0.420s
sys 0m0.000s