|
本帖最后由 mandriva 于 2013-11-6 18:37 编辑
动态内存 == heap memory == dynamic allocation 是指 malloc, realloc, calloc 和 free 管理的内存。
如你所说,
没有具体应用和代码,这个问题想都不用去想。
如有实际应用,比如说做一个服务器,单位时间内的连接数为一百万次,你需要监视这些连接的状态,
那就是 SOCKET * sockRef = (SOCKET *)malloc(1000 * 1000 * sizeof(SOCKET));
也可以在程序启动的时候 先不要开辟这么多,先开辟 initialSize = 10 这么多的存储区域,
SOCKET * sockRef = (SOCKET *)malloc(initialSize * sizeof(SOCKET));
同时
定义一个 的变量 used 去监视这个 堆栈 的 栈顶,每次插入连接就自增used++ , 如果 used 到达9的时候,这时候说明栈已经满了,那就增加这个堆栈。
initialSize +=10;
然后又在原来的基础上重新开辟内存,什么叫做原来的基础上? 原来的内存区块的左值(内存区块的地址叫做左值)的右值(该地址的内存区块存储的内容叫做右值)原封不动。
sockRef = (SOCKET *)realloc(sockRef, initialSize * sizeof(SOCKET));
然后就可以继续插入连接。
如果中间(设索引为1000,而堆栈数为10010)的某个连接不需要了,你可以用memmove 把1001-10009 的内存区块移回来,然后又used--,从而实现一种完全的内存管理,这就是 heap 这个英文单词的本质含义。
你要是用的纯C (ANSI C),要实现Array 办法就是我说的这种,你要是C++ 可以直接用C++ 的vector,不过C++ 的vector也是按照我说的办法实现的。 |
|