Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
malloc和gcc优化_C_Optimization_Allocation - Fatal编程技术网

malloc和gcc优化

malloc和gcc优化,c,optimization,allocation,C,Optimization,Allocation,作为练习,我用c编写了一些内存分配代码。现在,它几乎完全转化为宏。通过这样做,我能够将分配时间减少到类似glibc-malloc(未优化)的程度。然而,使用gcc-Ox运行测试,其中x>0,我无法接近glibc的速度——glibc比我快10^2左右 我知道glibc-malloc实现是基于Doug-Lea的dlmalloc的,并且注释表明代码确实从优化编译器中受益。我还没有研究这是为什么,我也没有掌握编译器优化技巧,我想知道是否有人知道或可以给出一个关于常用技术的提示?问题几乎肯定不是编译器选项

作为练习,我用c编写了一些内存分配代码。现在,它几乎完全转化为宏。通过这样做,我能够将分配时间减少到类似glibc-malloc(未优化)的程度。然而,使用gcc-Ox运行测试,其中x>0,我无法接近glibc的速度——glibc比我快10^2左右


我知道glibc-malloc实现是基于Doug-Lea的dlmalloc的,并且注释表明代码确实从优化编译器中受益。我还没有研究这是为什么,我也没有掌握编译器优化技巧,我想知道是否有人知道或可以给出一个关于常用技术的提示?

问题几乎肯定不是编译器选项,而是您的设计。您应该始终首先致力于提高算法的效率,并等待进行低级优化,直到您有一个可靠的、性能良好的设计。事实上,代码在未优化时性能良好。只有当应用了优化标志时,它的性能才会更好。这对我来说,代码只是需要为优化器“整理”。我绝对不认为编译器有问题。你在第一次测试中是用debug编译的吗?测试是什么?这可能是因为您的分配代码在这两方面都很慢,但是您的测试代码是以这种方式编写的,因此在没有优化的情况下,存在一个更主要的瓶颈,而这种瓶颈随着优化而消失。@jxh不可能。测试glibc-malloc和我的分配器的区别是更改为一行。ie测试实际上是使用unix time实用程序计时的一行代码。