У меня была такая же проблема после обновления докера с 17.05-го до 17.06-го через докер-машину
Обновление /etc/systemd/system/docker.service.d/10 -machine.conf
заменить пример
`docker daemon` => `dockerd`
с
[Service]
ExecStart=
ExecStart=/usr/bin/docker deamon -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver aufs --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic
Environment=
на
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --storage-driver aufs --tlsverify --tlscacert /etc/docker/ca.pem --tlscert /etc/docker/server.pem --tlskey /etc/docker/server-key.pem --label provider=generic
Environment=
сбросить изменения на выполнить:
sudo systemctl daemon-reload
перезапустить докер:
sudo systemctl restart docker
Просто создайте свой собственный.
Посмотрите на мой старый вопрос, чтобы узнать, как начать:
Поскольку вы не заботитесь о де- распределения вы можете использовать линейный распределитель. Выделите огромный объем памяти заранее и сохраните указатель на начало. malloc (x) перемещает указатель выделения вперед на x байтов и возвращает старое значение указателя, delete (x) заменяется заглушкой. Как упоминалось здесь, другой плакат уже имеет имплементацию
Выделения упакованы максимально плотно, выделения выполняются невероятно быстро, а память возвращается в порядке выделения. Когда ваша симуляция завершена, вы просто сбрасываете указатель распределителя на начало памяти и очищаете все указатели, которые у вас есть извне распределителя, на объекты внутри него.
Распределители пула - отличный выбор, если вы хотите удалить объекты, быстрее, чем куча, но не будет упаковывать ваши данные в память так близко и не так быстро. Используйте boost: pool для тех. Это отличный выбор для игр, если у вас есть x байтов для хранения, скажем - уровень - и вы готовы выбросить все это одновременно.
В стороне, если вас интересует производительность памяти, см. Что должен знать каждый программист о памяти-PDF . Он охватывает такие вещи, как местоположение ссылки и ее влияние на производительность. В частности, вы можете создать пул для каждого типа объектов, которые используются вместе, или объявить свои объекты как структуру массивов, а не как массив структур
Это отличный выбор для игр, если у вас есть x байтов для хранения, скажем - уровень - и вы готовы выбросить все это одновременно.В стороне, если вас интересует производительность памяти, см. Что должен знать каждый программист о памяти-PDF . Он охватывает такие вещи, как местоположение ссылки и ее влияние на производительность. В частности, вы можете создать пул для каждого типа объектов, которые используются вместе, или объявить свои объекты как структуру массивов, а не как массив структур
Это отличный выбор для игр, если у вас есть x байтов для хранения, скажем - уровень - и вы готовы выбросить все это одновременно.В стороне, если вас интересует производительность памяти, см. Что должен знать каждый программист о памяти-PDF . Он охватывает такие вещи, как местоположение ссылки и ее влияние на производительность. В частности, вы можете создать пул для каждого типа объектов, которые используются вместе, или объявить свои объекты как структуру массивов, а не как массив структур
Набор Распределитель блоков фиксированного размера работает довольно хорошо и имеет очень привлекательную лицензию (MIT).
Интерфейсы и реализации C Дэйва Хэнсона включают очень хороший распределитель на основе арены. Если используется память, метаданные с объектами не сохраняются, и они выделяются из непрерывного свободного пространства, так что это примерно столько места, на которое вы можете надеяться.
Обычным методом является выделение фиксированных блоков. См .: Леа , Робинсон , Ноултон , Грюнвальд .
Изменить: фиксированное распределение блоков действительно может оставлять пробелы, если есть частые выделения и освобождения. Один из проектов, с которым я работал, где класс мог выделить много подобъектов разного размера, но должен был сохранить их смежными, мы использовали простой пул памяти: выделить всю память, необходимую для всего содержимого объекта сразу, а затем использовать новое размещение для размещения их внутри.
Если вы не знаете заранее, насколько большим будет содержимое объекта, вы можете написать пул-распределитель, который распределяет память последовательно; т.е. он гарантирует
Foo *a = new Foo();
Bar *b = new Bar;
b == ((byte *)(a)) + sizeof(Foo);
. Это гарантирует, что все выделения, происходящие в конструкторе объекта, являются непрерывными. Вы получите большие рваные промежутки, когда объекты будут освобождены, поэтому нам приходилось часто дефрагментировать; даже в этом случае чистый прирост скорости был значительным.
Это довольно обширная тема, просто обратитесь к википедии .
Один конкретный пример был в книге Александреску и должен быть реализован в его библиотеке Локи . GCC также поставляется с несколькими реализациями std :: allocator
, просто посмотрите на свой дистрибутив.