У меня есть программа на C++, которая использует несколько очень больших массивов двойников, и я хочу уменьшить объем памяти этой конкретной части программы. В настоящее время я выделяю 100 из них, и они могут быть по 100 Мб каждый.Как управлять большими массивами
Теперь у меня есть то преимущество, что в конечном итоге части этих массивов становятся устаревшими во время последующих частей выполнения программы, и в любом случае нет необходимости когда-либо иметь в памяти все из них в памяти.
Мой вопрос заключается в следующем:
Есть ли способ сказать ОС после того, как я создал массив с новыми или таНос, что часть ненужно больше? Я прихожу к выводу, что единственный способ достичь этого - объявить массив указателей, каждый из которых может указывать на кусок, скажем 1 Мб нужного массива, так что старые куски, которые не нужны никакие больше можно повторно использовать для новых бит массива. Мне кажется, что я пишу пользовательский менеджер памяти, который кажется немного кувалдой, и это также создаст небольшой удар производительности.
Я не могу перемещать данные в массиве, потому что он собирается чтобы вызвать слишком много проблем с конфликтом. к массивам можно получить доступ к любому из большого количества потоков в любое время, хотя только один поток когда-либо записывает в любой заданный массив.
Часто ответ на проблемы с очень большим массивом заключается в использовании * разреженных массивов * - структуры данных, которая выглядит как массив, но на самом деле хранит только соответствующие элементы. Это работает, если большая часть массива - пустое пространство. Это правда здесь, или в какой-то момент вам действительно нужны все элементы в данном массиве? –
Будет ли приемлемым решение для платформы? Posix позволяет вам «mmap» большой регион, а затем «munmap» его части, как только вы закончите с ними. –