состояние на диск, и восстановить.
Возможно ли преобразовать вектор как-то в байты и более менее быстро восстановить его? (текущий размер)
без лишних алокаций
либо руками сериализовывать, либо библиотеки сериализации ищи
Вектор чаров это уже вектор байт
руками не проблемма, куда копать? сам массив данных сохраню конечно, но обьявлять вектор, потом копировать туда - это долго. Вот если б сделать типа std::vector<char>* MyVector = reinterpret_cast<std::vector<char>>(Data);
вот эту ересь брось
Не слишком-то и долго. Изначально получаешь данные, ты знаешь сколько их, выделяешь память одним куском и пишешь. У тебя нет быстрее способа десериализовать, ты всё равно раз считаешь данные
у меня 1 млн векторов, я выделю память под все сразу... както.. надо более глубокое понимание вектора
Твоя проблема звучит так: у меня есть N памяти при сериализации, а при десериализации я не хочу N памяти, желательно вообще по минимуму
нет, проблемма не в памяти. проблемма что КАЖДАЯ алокация это время (много времени). и миллион алокаций (или 10, 100млн) это долго
Если ты хочешь воссоздать исходные данные, тот же миллион векторов, тебе всё равно придётся их аллоцировать
хотя да... глупость... это противоречит самой сути вектора как инкапсуляции алокаций
Ну вот нельзя так. Разве что можешь сам себе сказать: у меня есть одна арена памяти, я себе знаю, что вот по таким-то смещениям в ней размещены такие-то объекты, я могу их так-то читать(интерпретировать) по надобности
Ладно, другой вопрос. Есть ли возможность сказать системе что я собираюсь создать 1млн векторов и выдели мне пжс сразу много памяти, чтоб небыло 1млн системных вызовов типа "система дай памяти"
Ну да. Ты можешь банально просто маллокнуть сразу всю память. Или просто сделать вектор и ресайзнуть на всю память
в том то и проблемма, у меня не большой вектор, а именно миллион маленьких, притом вложенных
Я же и говорю: в этой огромной арене памяти запиши себе где у тебя какой объект находится и интерпретируй по необходимости
Мож это... Над архитектурой подумать?
Да тут кажется просто преждевременные оптимизации какие-то...
это вариант В
Да хоть Г. ОС даст на x64 терабайты памяти выделить, только в один прекрасный момент вместо bad_alloc рискуешь словить OOM Killer
ну такое... вся инфа первоначально была в json: 237k файлов, 3Gb, парсинг: 24часа потом в норм формат читабельный: 237к файлов, 500Mb, парсинг 28 мин сейчас в 1 бинарник: 1 файл, 100Mb, парсинг 12сек
Стандартным вектором ты так не сделаешь. Задача решаема, но нужен свой контейнер, который сможешь маппить.
reserve - твой друг ! Use reserve, Luke!
Если у него миллион контейнеров, то надо сделать миллион резервов вместо одного.
Почему у него миллион?
он выше написал, что у него миллион векторов
Мда... Непросто видно парню
Обсуждают сегодня