复制存储在内存映射文件中的数组的一部分

时间:2014-02-17 08:23:49

标签: c++ arrays windows memory-mapped-files

我有一个存储在内存映射文件中的双精度数组,我想读取数组的最后3个条目(或者某些任意条目)。

可以将存储在MMF中的整个数组复制到辅助数组中:

void ReadDataArrayToMMF(double* dataArray, int arrayLength, LPCTSTR* pBufPTR)
{
    CopyMemory(dataArray, (PVOID)*pBufPTR, sizeof(double)*arrayLength);
}

并使用所需的条目,但这意味着将整个数组复制为实际需要的几个值。

我可以将arrayLength缩小到某个数字n以获取第一个n条目,但是我遇到了复制无法启动的数组部分的问题从第一个条目。我尝试使用pBufPTR指针但只能获得运行时错误。

关于如何从数组中间访问/复制内存而不需要复制整个数组的任何想法?

2 个答案:

答案 0 :(得分:1)

查找第n个元素的起始偏移量:

const double *offset = reinterpret_cast<const double*>( *pBufPTR ) + n;

复制最后3个元素:

CopyMemory( dataArray, reinterpret_cast<const double*>( *pBufPTR ) + arrayLength - 3, 3 * sizeof(double) );

答案 1 :(得分:0)

您只需将要复制的第一个数组元素的(基于0)索引添加到传入的dataArray指针值中......指针将按索引时间{{1}增加}}。确保传入sizeof(double)值,反映要操作的元素数量,而不是原始数组长度。

例如,复制最后10个元素(假设您已经检查过至少有10个元素)......

arrayLength

同样(虽然说明了获取地址的不同符号),获取元素20..24:

ReadDataArrayToMMF(dataArray + arrayLength - 10, 10, &myBufPTR);