从boost mapped_region访问数据时出错

时间:2014-01-23 03:03:46

标签: boost out-of-memory file-mapping

访问mapped_region数据时遇到了一些麻烦。

首先,我定义一个结构:(对于股票报价......)

struct bar{
double open,high,low,close;
size_t volume;
bar(double _open, double _high, double _low, double _close): open(_open),high(_high), close(_close), volume(_volume){}};

这里是sample.txt(我也尝试过二进制格式)文件,我希望通过条形类型的迭代访问该文件

89.26    89.47    89.25    89.47      563 
89.47    89.56    89.27    89.47      284 
89.46    89.56    89.26    89.33      264 

使用以下代码,我可以逐字逐句地阅读:

file_mapping m_file(filename,read_only); 
mapped_region region(m_file,read_only);
char const* add= static_cast<char*> (region.get_address());

即,对于第一个数据,我会得到8 9。 2 6,使用add [i]逐个字符。这可能是非常糟糕的工作量。 所以我想转换:

bar* myaddr=(bar*)(region.get_address()), where bar is define as the above..

以便我可以使用以下方式访问数据:

myaddr->open (with an offset ). 

例如,现在我想访问第二行的第3个号码,我只需要:

 (myaddr+1)->high

然而,结果确实有线:

 e.g 1.50656e-189, or sometimes 825303072 for (myaddr+2)->volume

事实上,如果我转换为超出char的任何时间,就会出现这样的错误......

问题:如何使用myaddr->访问映射数据?没有错误?

由于

1 个答案:

答案 0 :(得分:0)

这看起来像一个文本文件。如果您将其作为内存映射区域读取,则会获得文本,而不是双倍。那是你的问题。