如何指向更大的中间的N(运行时定义的数字)字节?

时间:2017-04-17 02:00:13

标签: c++ pointers

案例是我在内存中加载了大量二进制数据,需要在N字节长度的数据块和来自这个大集合中间的N字节块之间执行按位操作。

我的第一个想法是以某种方式获得指向N个字符的指针,然后将其更改为指向块的开始。我打算做的伪代码:

#include <iostream>

int main()
{
        unsigned int n = getBlockLength(), x = getChunkStartPos(), s = getBinarySetLength();
        char *binary_set;
        char (*chunk_ptr)[n]; //Let's suppose n = 5
        //char block[n] = {'s', 'm', 't', 'h', 'g'};

        binary_set = malloc(s);
        fillBinarySet(binary_set, s); //Let's suppose s = 15 and binary_set is now filled with {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o'}
        chunk_ptr = &binary_set + x;

        std::cout << *chunk_ptr << std::endl; //should print "efghi"

        //actually would do something like this:
        //result = block & *chunk_ptr;

        return 0;
}

这当然不会编译,字符数组只是一个例子,因为我已经说过它实际上是一组很大的二进制数据。即使它会编译,我也不确定系统如何知道chuck_ptr指向n个字节(它搜索空字符 - 我不能只放入binary_set这个目的 - 在处理char时,但在bool s数组的情况下是什么?)...

“大”是指125MB到1000MB之间的东西。它很可能只是从文件中映射(mmap())而不是完全加载到内存中,但RAM消耗预计几乎相同,因为整个集合将经常进行读写操作。推荐的block(和chunk)通常应该在1B和5MB之间。

对于实现这一目标的最快,最少CPU和RAM密集方式的想法,请?这是已经很繁重的应用程序的核心,也是唯一可行的解​​决方案(例如:从块的开始到结束逐字节循环二进制数据集)我可以开发的不适合性能要求。 :(

我只是想要一些想法或方向,而不是要求你为我做我的工作。如果使用C或C ++是不可能的,我想在其他高性能,编译的语言中指出一些解决方案。非常感谢。

0 个答案:

没有答案