Перераспределение памяти - PullRequest
1 голос
/ 13 июня 2010

Какой правильный и лучший способ перераспределить память? например я выделяю 100 байт с помощью функции WinAPI HeapAlloc затем я заполняю 100 байтов этой памяти некоторыми данными, и теперь я хочу добавить больше новых данных в конце предыдущего ...

Что мне делать? Сделать новое распределение с большим количеством байтов, а затем скопировать старый + новый в новое место и освободить старую память? Или есть какой-то способ выделить новую память в конце старых данных, а затем скопировать только новые данные?

Ответы [ 2 ]

2 голосов
/ 13 июня 2010

Вам, вероятно, следует использовать HeapReAlloc , поскольку Windows, без сомнения, будет иметь оптимизацию, если сможет просто расширить память без копирования данных.

Например, я видел реализации realloc (стандарт C), который проверяет, может ли текущий блок просто поглотить свободный блок, следующий за ним.Если это так, он делает это, чтобы избежать операции копирования.Если нет, он выделяет новую память и копирует ее перед тем, как освободить старую.

Еще одно преимущество заключается в том, что вы минимизируете требуемую дополнительную память.В версии с копированием в какой-то момент у вас должно быть две копии текущих данных.

1 голос
/ 13 июня 2010
...