【发布时间】:2016-12-21 09:36:43
【问题描述】:
我使用malloc() 将数十亿位加载到 RAM 中 - 将其称为 big_set。我在 RAM 中还有其他数量的位(将其称为 small_set),它们都设置为 1,我知道它的大小(多少位 - 我将其称为 ss_size ),但无法预测,因为每次执行都会有所不同。 ss_size 有时可能小至 100,也可能大至数亿。
我需要在 small_set 和 ss_size 位长度的 big_set 的一些 不可预测 部分之间进行一些按位运算.我不能仅仅扩展 small_set 在最重要和最不重要的边上都用零来使其大小等于 big_set 的大小,因为那将是非常 RAM 和CPU 成本高(相同的操作将同时使用许多不同大小的 small_set 进行,并且还会在 small_set 上进行移位操作,扩展它会导致更多位CPU 工作)。
例子:
big_set:100111001111100011000111110001100(实际上是数十亿位)
small_set:111111,所以 ss_size 为 6。(可能是不可预测的位数)。
我需要取 big_set 的 6 位长度部分,例如:001100、000111 等 Obs.:不一定是第 N 6 位,它可以是从第 3 位到第 9 位, 例如。不知道怎么弄。
我不想得到一个 big_set 副本,除了我要占用的 6 位(例如 000000001111100000000000000000000)之外的所有内容都归零,因为那也会非常昂贵的 RAM。
问题是:我怎样才能从 big_set 内的任何地方获取 N 位,以便我可以在它们和 small_set 之间进行按位运算?成为 N = ss_size。
【问题讨论】:
-
问题是?
-
我发现问题不在于将
small_set存储在内存中,而在于执行所需的操作(small_set和big_set之间的按位操作)。您是否已经为 OR、AND、XOR 和其他操作编写了一些代码? -
@VolAnd 我已经编写了大部分需要的按位运算,但是在我编写它们的时候,我正在扩展
small_set,两边都用零,使其大小等于big_set的大小。我刚刚注意到这不是一个好主意,因为 RAM 使用量很大,现在我想根据问题帖子中的描述进行更改。 -
谈谈 XY 问题...由于小集合始终是
1值的范围,因此有用的按位运算的数量在某种程度上是有限的(AND、XOR 是我首先想到的)。想想你的实际目标(从P位置开始,从大集合中获取N位)并实现它,而不是将问题变成位操作理论。 -
您似乎在询问如何访问和修改大位字符串的子字符串。这是正确的吗?
标签: c malloc allocation