Sunday, June 7, 2009

Hash & VC6 Release Mode

道理说,对于VC6,一个int是4字节,因此开一个5M的数组需要20MB内存。事实也是如此
不过对于一个class,虽然理论上的内存占用只有类的成员变量,但是事实说明,对于大量数据,占用的内存是理论值的4倍左右
英明的符老大提出了Debug & Release的观点。事实说明,采用release mode,能把上面的内存减少大概一半。也就是说,还是理论值的大概两倍
我们看一个例子:普通的AVL Tree node,做hash用。每个节点是两个int和两个指针(也是4字节),所以5M个节点大概要占用80MB内存,而不是Debug模式下的320MB
而采用C++自带的STL hash(采用RB tree,红黑树,wiki有详细介绍),内存占用大概是自己编写的数据结构的1.25倍(但是没有研究过是否时间复杂度低)
一个可能的原因是,频繁new新的小的但是数量多的class member,导致内碎片。还没有证明是否是这样,如果是,就可以直接分配大块内存,再进行处理
VC6的release mode设置在 Build -> Set Action Configuration
* To do: 分析一下大规模数据的hash Vs BST。我老板说,大规模数据下hash根本没法用。听符老大的观点似乎hash在大数据量的时候反而更有优势。做一做

No comments:

Post a Comment