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