在测试hashmap(我实现成hashtable了,对hashmap待了解)的运行时间时,总是发现运行时间总是难以降下,一次偶然发现N次printf造成了占用时间的问题,后来为了进一步减小运行时间进行了删减测试,去掉其他部分只留要测试的子函数,最终觉得应该是内存分配上出了问题。后来我对malloc进行了专门的测试。数据量500KK(即N=500 000 000):
- for循环中malloc一个结构体(假设大小4char)。
- 直接malloc(4*N)。
结果很明显,前者时间远大于后者。后来在两中操作中添加strncpy操作,目的是将申请到的内存全填满。结果还是前者时间远大于后者。
我在想,对于大量数据的操作中是否如我所测的多次malloc的效率远低于一次malloc。并且,我是否应该选择另外的方式来分配内存,比如自建内存池封装malloc,这样做的话会有一些什么问题,或者说大家是否有更好的方法。(我还没有仔细研读malloc函数的实现) @daimajia @Dodolong
在测试hashmap(我实现成hashtable了,对hashmap待了解)的运行时间时,总是发现运行时间总是难以降下,一次偶然发现N次printf造成了占用时间的问题,后来为了进一步减小运行时间进行了删减测试,去掉其他部分只留要测试的子函数,最终觉得应该是内存分配上出了问题。后来我对malloc进行了专门的测试。数据量500KK(即N=500 000 000):
结果很明显,前者时间远大于后者。后来在两中操作中添加strncpy操作,目的是将申请到的内存全填满。结果还是前者时间远大于后者。
我在想,对于大量数据的操作中是否如我所测的多次malloc的效率远低于一次malloc。并且,我是否应该选择另外的方式来分配内存,比如自建内存池封装malloc,这样做的话会有一些什么问题,或者说大家是否有更好的方法。(我还没有仔细研读malloc函数的实现) @daimajia @Dodolong