этот Q был выяснен. Я использую систему Windows, мне нужно ввести 'set STORYBOOK_THEME = red', чтобы установить переменные окружения, а затем я могу получить эту переменную с помощью 'process.env.STORYBOOK_THEME'. [ 111]
Я изменил сценарий следующим образом:
"scripts": {
"book": "set STORYBOOK_THEME=red&&start-storybook -p 9001 -c .storybook"
}
это работает!
Вы реализовали распределитель на основе стека. Вы не можете освободиться, не оставляя пробелов. Обычно пул относится к блоку смежной памяти со слотами фиксированного размера, которые дважды связаны между собой для добавления и удаления с постоянным временем.
Вот один , который вы можете использовать в качестве руководства. Он такой же, как у вас, но включает в себя базовые итераторы по выделенным узлам и использует шаблоны для распознавания типа.
Две очевидные проблемы:
1 / У вас нет deallocate ()
.
2 / A deallocate ()
будет очень сложно написать с вашей текущей стратегией, если вы не собираетесь всегда освобождать в точном обратном порядке распределения. Вы' Вам нужно будет учесть случай, когда клиент хочет освободить память в середине вашего используемого раздела.
Конечно, если вы освобождаете память в обратном порядке, (2) не является проблемой. И если вы вообще никогда не освобождаете память, (1) также не является проблемой.
Это зависит от того, что вы хотите, чтобы она делала.
Ваша куча не разрешает освобождение. Как вы будете использовать его для объектов, выделенных с помощью new в C ++?
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();
Совет? Не изобретайте велосипед. Есть много хороших пул библиотек.