malloc和gcc优化
作为练习,我用c编写了一些内存分配代码。现在,它几乎完全转化为宏。通过这样做,我能够将分配时间减少到类似glibc-malloc(未优化)的程度。然而,使用gcc-Ox运行测试,其中x>0,我无法接近glibc的速度——glibc比我快10^2左右malloc和gcc优化,c,optimization,allocation,C,Optimization,Allocation,作为练习,我用c编写了一些内存分配代码。现在,它几乎完全转化为宏。通过这样做,我能够将分配时间减少到类似glibc-malloc(未优化)的程度。然而,使用gcc-Ox运行测试,其中x>0,我无法接近glibc的速度——glibc比我快10^2左右 我知道glibc-malloc实现是基于Doug-Lea的dlmalloc的,并且注释表明代码确实从优化编译器中受益。我还没有研究这是为什么,我也没有掌握编译器优化技巧,我想知道是否有人知道或可以给出一个关于常用技术的提示?问题几乎肯定不是编译器选项
我知道glibc-malloc实现是基于Doug-Lea的dlmalloc的,并且注释表明代码确实从优化编译器中受益。我还没有研究这是为什么,我也没有掌握编译器优化技巧,我想知道是否有人知道或可以给出一个关于常用技术的提示?问题几乎肯定不是编译器选项,而是您的设计。您应该始终首先致力于提高算法的效率,并等待进行低级优化,直到您有一个可靠的、性能良好的设计。事实上,代码在未优化时性能良好。只有当应用了优化标志时,它的性能才会更好。这对我来说,代码只是需要为优化器“整理”。我绝对不认为编译器有问题。你在第一次测试中是用debug编译的吗?测试是什么?这可能是因为您的分配代码在这两方面都很慢,但是您的测试代码是以这种方式编写的,因此在没有优化的情况下,存在一个更主要的瓶颈,而这种瓶颈随着优化而消失。@jxh不可能。测试glibc-malloc和我的分配器的区别是更改为一行。ie测试实际上是使用unix time实用程序计时的一行代码。