.C的堆(Heap)操作函数(malloc等)的工作原理
请教大家..C的堆(Heap)操作函数(malloc等)的工作原理学校需要让我们写一个虚拟堆的class..我知道这帖子应
请教大家..C的堆(Heap)操作函数(malloc等)的工作原理
学校需要让我们写一个虚拟堆的class..
我知道这帖子应该发到c++,不过这问题可能更偏底层一些,就发到这里来了..
我所了解的C的分配堆(heap)的方法就是在每块分配的内存前面都有一个节点(Node)
Node里面存着接下来内存块的信息,还有下一节点的地址.
老师给的题目就是让我们自己写一个这样的协议,叫vheap
可以vmalloc,也可以vcalloc,vfree之类的
先找系统申请块内存(memBlock),知道了内存地址之后,就再不用到c提供的malloc和calloc了
而是用自己写的class来处理这块内存(memBlock),实现和c的mallo ccalloc free一样的功能
于是...
想请教下大侠们
这个节点的结构应该是如何呢?
我当前的计划是这样的
struct memNode{
memNode *pNext;
int flag;
}使用pBlock->pNextBlock - pBlock来计算内存块大小
使用flag来区分内存块free与否
我需要不需要将内存块的大小信息记录在节点内呢(空间占用率增加,计算时间减少)?
这个情况下是空间复杂度(space complexity)对性能影响更大 还是时间复杂度(time complexity)对性能影响最大?
C的内存节点又是如何做的呢?
另:如果储存内存大小到每块内存前面的节点上的话,signed integer只能表示256Mb,unsigned integer 可以表示512MB,再打了表示不了了,需要更大的空间储存这个信息.
c? 性能优化 malloc?原理?内存?分配 malloc 内存
[解决办法]堆这个生物,是由OS提供的。
C的malloc一般直接封装了OS的API,而你们老师的要求,更像个一个内存池。
[解决办法]这明显是一个内存池
可以参考我的博文http://blog.csdn.net/zilaishuichina/article/details/8573310
[解决办法]参考Linux源代码中malloc和free的实现?
[解决办法]长长见识了
[解决办法]混水来了,。。