【发布时间】:2011-01-21 03:16:07
【问题描述】:
这个问题是在一次采访中问我的。
假设 char *p=malloc(n) 分配了 n 个以上的内存,比如说分配了 N 个字节的内存,并且 free(p) 用于释放分配给 p 的内存。
堆管理器可以执行这种错误的分配吗? 现在会发生什么,是释放 n 个字节还是释放 N 个字节?
有什么方法可以查出释放了多少内存?
编辑
有什么方法可以查出释放了多少内存?
聊胜于无,
mallinfo() 可以揭示“Fred Larson”所指出的一些亮点
【问题讨论】:
-
为什么你认为这样的分配是错误的?无论
malloc()分配了多少“实际”字节,您都只能使用n字节,free()将释放所有分配的字节。大多数malloc实现会分配更多空间,然后出于效率原因请求。一个实现定义了malloc和free,根据定义,它们必须就分配方案达成一致。
标签: c++ c malloc heap-memory free