В распространенных реализациях, таких как 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
, чтобы получить правильный окончательный размер. Возможно, я смогу пропустить окончательное изменение размера
в качестве оптимизации (за счет постоянного превышения доступности), и я хочу знать, стоит ли вообще это пытаться.