У меня есть несколько миллиардов бит, загруженных в ОЗУ, с использованием malloc()
- назовем это big_set. У меня также есть другое количество бит (назовем его small_set) в ОЗУ, которые все установлены в 1, и я знаю его размер (сколько бит - я назову его ss_size), но не могу его предсказать, так как зависит от каждого исполнения. ss_size может быть как можно меньше 100 или больших, как сотни миллионов.Получить часть определенной длины выделенного пространства памяти
мне нужно сделать некоторые битовые операции между small_set и некоторых непредсказуемых частями big_set из ss_size длины бита. Я не могу просто увеличить small_set с нулями на обеих наиболее значимых и наименее значимых сторонах, чтобы сделать его размер равным Размер файла big_set, так как это было бы очень дорогостоящим ОЗУ и ЦП (одни и те же операции будут выполняться на одном и том же время с большим количеством разного размера small_set s, а также будет выполнять операции сдвига над small_set, расширяя его, чтобы больше работать на процессоре).
Пример:
big_set: 100111001111100011000111110001100
(будет миллиарды битов в реальности)
small_set: 111111
, так что ss_size равно 6. (может быть непредсказуемо число битов) ,
мне нужно взять 6 бит части длины big_set, например .: 001100
, 000111
и т.д. Obs .: не обязательно NTH 6 бит, это может быть от 3 до 9-бит, например. Я не знаю, как это получить.
Я не хочу, чтобы получить big_set копию со всем обнуленным кроме 6 битых I будет принимать, как на 000000001111100000000000000000000
, поскольку это было бы очень дорого RAM.
Возникает вопрос: как я могу получить N битов из любой точки внутри big_set, так что я могу сделать битовые операции между они и small_set? Будучи N = ss_size.
И вопрос является? – alk
Я вижу, что проблема не в хранении 'small_set' в памяти, а в реализации требуемой операции (побитовые операции между' small_set' и 'big_set'). Вы уже пишете код для OR, AND, XOR и других операций? – VolAnd
@VolAnd У меня уже есть большинство необходимых поразрядных операций, но в то время, когда я их писал, я расширил «small_set» с нулями с обеих сторон, чтобы размер его был равен размеру 'big_set'. Я только заметил, что это не очень хорошая идея из-за большого использования ОЗУ, и теперь я хочу изменить его, как описано в сообщении вопроса. –