【发布时间】:2012-02-22 03:25:08
【问题描述】:
当您有一个动态分配的缓冲区在运行时以不可预知的方式(例如向量或字符串)改变其大小时,优化其分配的一种方法是仅在 2 的幂(或其他一些集合)上调整其后备存储的大小边界/阈值),并保留未使用的额外空间。这有助于分摊搜索新的空闲内存和复制数据的成本,但会消耗一点额外的内存。例如,许多 C++ stl 容器的接口规范(reserve vs resize vs trim)都有这样的方案。
我的问题是,Linux 3.0 x86_64、GLIBC 2.13、GCC 4.6 (Ubuntu 11.10) 上的 malloc/realloc/free 内存管理器的默认实现是否有这样的优化?
void* p = malloc(N);
... // time passes, stuff happens
void* q = realloc(p,M);
换句话说,对于 N 和 M 的什么值(或在什么其他情况下)p == q?
【问题讨论】:
标签: linux memory gcc glibc allocation