Имеет ли смысл malloc сказать 4 байта в куче, учитывая, что malloc внутренне часто обходила бы это до 8-байтовой границы на 32-битных системах и 16 для 64-байтных систем для ее внутреннего использования.
Мне нужно выделить строку, в которой хранится одно или двузначное число. Таким образом, мне нужно максимум 3 байта (2 для двух цифр и 1 для символа "\ 0" для завершения моей строки). Хотите узнать, есть ли какие-либо выгоды от выполнения malloc 3, и если я должен сделать malloc из 8?
Есть идеи?
Выделите то, что вам нужно, и не волнуйтесь об использовании памяти.
У интеллектуальных распределителей памяти будут отдельные пулы памяти для выделения небольших кусков.
Например, распределитель памяти может иметь отдельный пул памяти для размещения элементов размером менее 8 байтов.
Да, совершенно разумно только спросить, что вам нужно.
Распределитель (malloc
, new
, VirtualAlloc
или что у вас есть) всегда может использовать ваши распределения, но это не ваша проблема, в общем.
Во всяком случае, он может размещать больше распределений больше, чем меньшие, из-за схем микширования/разных пулов для разных размеров.
В любом случае, не беспокойтесь о том, что накладные расходы, если у вас нет большого количества ассигнований, поэтому накладные расходы распределителя могут быть соломой, которая ломает верблюда.
Кроме того, распределитель может быть изменен или просто заменен (для лучшего пространства/времени-производительности, отладки, отказоустойчивости, только потому, что), и вы действительно не хотите течь все детали того, как работал последний распределитель по всему вашему коду.
Особенно вы не хотите уходить с пути, чтобы противостоять любым возможным улучшениям, связанным с лучшей настройкой вашего прецедента.
Лучше всего запросить нужный размер, а не большую сумму, на которую отвечает * Deduplicator
Существует важное исключение, если OP найдет в будущем необходимость выделить 0
байтов.
В этом случае распределители, такие как malloc(0)
могут возвращать NULL
или указатель - либо разрешены спецификацией C. Это может смутить или разорвать последующий код, который специально ожидает одного из этих двух. Поэтому, когда код должен выделять 0
байтов, рассмотрите возможность возврата malloc(1)
или NULL
и не оставляя его до malloc(0)
.
realloc
.
0
байтов? Можете ли вы объяснить, почему кто-то сделал это намеренно?
std::string
и перестаньте беспокоиться о выделении и освобождении памяти для строк.