Улучшения для этого C++ складывают средство выделения?

этот Q был выяснен. Я использую систему Windows, мне нужно ввести 'set STORYBOOK_THEME = red', чтобы установить переменные окружения, а затем я могу получить эту переменную с помощью 'process.env.STORYBOOK_THEME'. [ 111]

Я изменил сценарий следующим образом:

    "scripts": {
    "book": "set STORYBOOK_THEME=red&&start-storybook -p 9001 -c .storybook"
  }

это работает!

6
задан Machavity 16 October 2018 в 02:21
поделиться

4 ответа

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

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

4
ответ дан 9 December 2019 в 22:39
поделиться

Две очевидные проблемы:

1 / У вас нет deallocate () .

2 / A deallocate () будет очень сложно написать с вашей текущей стратегией, если вы не собираетесь всегда освобождать в точном обратном порядке распределения. Вы' Вам нужно будет учесть случай, когда клиент хочет освободить память в середине вашего используемого раздела.

Конечно, если вы освобождаете память в обратном порядке, (2) не является проблемой. И если вы вообще никогда не освобождаете память, (1) также не является проблемой.

Это зависит от того, что вы хотите, чтобы она делала.

2
ответ дан 9 December 2019 в 22:39
поделиться

Ваша куча не разрешает освобождение. Как вы будете использовать его для объектов, выделенных с помощью new в C ++?

1
ответ дан 9 December 2019 в 22:39
поделиться
size_t new_end = ((size_t) heap_end) + bytes;

Не хорошо , никогда не делай таких вещей, ты предполагаешь, что sizeof (size_t) == sizeof (void *), а также, что произойдет, если bytes == (size_t) (- 1) это не будет работать

Кроме того, необходимо убедиться, что возвращаемые вами указатели выровнены. В противном случае у вас были бы проблемы. Поэтому вам нужно убедиться, что число байт кратно 4 или 8. В зависимости от вашей платформы.

class {...
char *max_end,*head_end,*heap_start;
};

...
max_end=heap_start+size;
...
bytes=align_to_platform_specific_value(bytes);
if(max_end-heap_end >= bytes) {
   void* output = (void*)heap_end;
   heap_end+=bytes;
   return output;
}
throw std::bad_alloc();

Совет? Не изобретайте велосипед. Есть много хороших пул библиотек.

4
ответ дан 9 December 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: