malloc менее 8 байт

0

Имеет ли смысл malloc сказать 4 байта в куче, учитывая, что malloc внутренне часто обходила бы это до 8-байтовой границы на 32-битных системах и 16 для 64-байтных систем для ее внутреннего использования.

Мне нужно выделить строку, в которой хранится одно или двузначное число. Таким образом, мне нужно максимум 3 байта (2 для двух цифр и 1 для символа "\ 0" для завершения моей строки). Хотите узнать, есть ли какие-либо выгоды от выполнения malloc 3, и если я должен сделать malloc из 8?

Есть идеи?

  • 3
    Используйте std::string и перестаньте беспокоиться о выделении и освобождении памяти для строк.
  • 0
    Здесь действительно проблема с памятью или вы просто пытаетесь оптимизировать?
Показать ещё 4 комментария
Теги:
malloc
memory

3 ответа

3

Выделите то, что вам нужно, и не волнуйтесь об использовании памяти.

У интеллектуальных распределителей памяти будут отдельные пулы памяти для выделения небольших кусков.

Например, распределитель памяти может иметь отдельный пул памяти для размещения элементов размером менее 8 байтов.

2

Да, совершенно разумно только спросить, что вам нужно.

Распределитель (malloc, new, VirtualAlloc или что у вас есть) всегда может использовать ваши распределения, но это не ваша проблема, в общем.
Во всяком случае, он может размещать больше распределений больше, чем меньшие, из-за схем микширования/разных пулов для разных размеров.

В любом случае, не беспокойтесь о том, что накладные расходы, если у вас нет большого количества ассигнований, поэтому накладные расходы распределителя могут быть соломой, которая ломает верблюда.

Кроме того, распределитель может быть изменен или просто заменен (для лучшего пространства/времени-производительности, отладки, отказоустойчивости, только потому, что), и вы действительно не хотите течь все детали того, как работал последний распределитель по всему вашему коду.

Особенно вы не хотите уходить с пути, чтобы противостоять любым возможным улучшениям, связанным с лучшей настройкой вашего прецедента.

1

Лучше всего запросить нужный размер, а не большую сумму, на которую отвечает * Deduplicator

Существует важное исключение, если OP найдет в будущем необходимость выделить 0 байтов.

В этом случае распределители, такие как malloc(0) могут возвращать NULL или указатель - либо разрешены спецификацией C. Это может смутить или разорвать последующий код, который специально ожидает одного из этих двух. Поэтому, когда код должен выделять 0 байтов, рассмотрите возможность возврата malloc(1) или NULL и не оставляя его до malloc(0).

  • 1
    Это важный вопрос. И имхо настоящая бородавка на языке, особенно при переходе на realloc .
  • 0
    А нужно выделить 0 байтов? Можете ли вы объяснить, почему кто-то сделал это намеренно?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню