Поддержанные диском контейнерные классы STL? [закрытый]

Мой первый ответ когда-либо в надежде, что он будет полезен кому-то: теперь я старый вопрос, но я столкнулся с той же ошибкой, что и вышеупомянутый вопрос, поскольку я пишу класс TcpServer, и я пытался используйте pthreads. Я нашел этот вопрос, и теперь я понимаю, почему это происходит. Я закончил это:

#include <thread>

метод для запуска threaded -> void* TcpServer::sockethandler(void* lp) {/*code here*/}

, и я вызываю его с помощью лямбда -> std::thread( [=] { sockethandler((void*)csock); } ).detach();

, что кажется чистым подходом ко мне.

39
задан prakash 2 October 2008 в 15:23
поделиться

4 ответа

Я реализовал некоторую очень похожую вещь. Реализация итераторов является самой сложной. Я использовал повышение:: iterator_facade для реализации итераторов. Используя boost::iterator_facade Вы можете легкий адаптироваться , любой кэшировался на дисковые структуры данных для имения интерфейса контейнера STL.

10
ответ дан Ted 6 August 2019 в 06:09
поделиться

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

См. повышение:: межпроцессы для документов об их простой в использовании реализации файлов с отображенной памятью, эта статья доктора Dobbs для детального обсуждения записи средств выделения, и этот столбец IEEE Software для описания проблемы и пример кода .

8
ответ дан Diomidis Spinellis 6 August 2019 в 06:09
поделиться

Если (как Вы пишете) Вы не интересуетесь персистентностью, простое решение должно было бы увеличить Ваш размер "кучи" и использовать средства виртуальной памяти Вашей операционной системы. Часть "кучи", которая не впишется в физическую память Вашего компьютера, закончит тем, что была разбита на страницы на диске, давая Вам точно, что Вы хотите: нормальный доступ STL к данным часто хранится на диске. Операционная система будет заботиться о кэшировании наиболее используемых страниц в физической памяти и выселении к диску те, Вы не используете много. Ваш код останется тем же, и можно увеличить его производительность просто путем добавления большей физической памяти.

Для увеличения размера "кучи" проверяют параметры операционной системы, как ulimit (1) в системах Unix и свойствах System - Усовершенствованный - Производительность - Усовершенствованный - Виртуальная память на Windows XP. Если Вы совершили нападки, 32-разрядный предел на 4 ГБ рассматривают перемещение в архитектуру на 64 бита или компиляцию Вашей программы для 64 битов.

3
ответ дан Diomidis Spinellis 6 August 2019 в 06:09
поделиться

Я не знаю много о предмете, но могло бы быть возможно записать подобный STL интерфейс в файл с отображенной памятью?

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

2
ответ дан luke 6 August 2019 в 06:09
поделиться
Другие вопросы по тегам:

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