我使用malloc()
加载到RAM中的数十亿比特 - 将其称为big_set。我还有另外一些位(将它称为small_set)在RAM中,它们都被设置为1,我知道它的大小(多少位 - 我会称它为ss_size),但无法预测它,因为每次执行都不相同。 ss_size有时可能小到100或大到数亿。获取指定长度的已分配内存空间的一部分
我需要做的small_set和一些不可预知的部分ss_size的big_set位长度之间的一些位操作。我不能只是扩大small_set在最重要和最不重要的一面都用零来使它的大小等于big_set的大小,因为这将非常昂贵的RAM和CPU(相同的操作将在相同时间有很多不同的大小small_set s,并且还将通过small_set进行移位操作,扩展它将导致CPU在更多位上工作)。
实施例:
big_set:100111001111100011000111110001100
(将是数十亿比特的现实)
small_set:111111
,所以ss_size是6(可以是比特不可预测的数目) 。
我需要big_set的6位长度的部分,例如:001100
,000111
等实验值:未必第N 6位,也可能是从3日至9位,例如。我不知道我怎么能得到它。
我不想得到一个big_set复制除了我将采取的6位,如在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'的大小。我刚刚注意到这不是一个好主意,因为内存使用量很大,现在我想根据问题的帖子中所述进行更改。 –