Действительно ли realloc сжимает буферы в обычных реализациях?

В распространенных реализациях, таких как Linux / Glibc, Windows / MSVC и BSD / Mac OS X, будет

void *p = malloc(N + M);  // assume this doesn't fail
p = realloc(p, N);        // nor this

для N , M> 0 , фактически сжать буфер, возвращенный malloc в вызове realloc , в том смысле, что до M байтов может вернуться в бесплатный список? И что еще более важно, есть ли шанс, что он перераспределяет буфер?

Я хочу знать, потому что я только что реализовал динамические массивы поверх numpy.ndarray , и я выполняю изменение размера , который вызывает realloc , чтобы получить правильный окончательный размер. Возможно, я смогу пропустить окончательное изменение размера в качестве оптимизации (за счет постоянного превышения доступности), и я хочу знать, стоит ли вообще это пытаться.

11
задан Fred Foo 17 November 2011 в 21:15
поделиться