在C(或C ++)中,我想知道是否可以部分释放一块内存。
例如,假设我们创建一个大小为100的整数数组a
,
int * a = malloc(sizeof(int)*100);
然后我们想要调整a
的大小,使其保持20个整数而不是100个。
有没有办法只释放a
的最后80 * sizeof(int)字节?例如,如果我们调用realloc,它会自动执行此操作吗?
答案 0 :(得分:15)
您可以使用realloc,但绝对应该考虑使用STL容器而不是手动分配内存。
答案 1 :(得分:3)
我们更喜欢RAII容器到C ++中的原始指针。
#include <vector>
// ...
{
std::vector<int> a(100)
// ...
std::vector<int>(a.begin(), a.begin() + 20).swap(a);
}
答案 2 :(得分:2)
我更喜欢使用std::vector
。让我们启用C ++ 0x:
std::vector<int> vec(20);
vec.reserve(100);
// do something
vec.shrink_to_fit();
从n3092开始(不是最终草稿,我需要在这台PC上获得一份新的副本):
void shrink_to_fit();
备注:shrink_to_fit
是一个减少内存使用的非绑定请求。 [注意:请求是非绑定的,以允许特定于实现的优化的纬度。 - 尾注]