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

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

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

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

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

我可以缩小arrayLength到一些数字n为了得到前n条目,但我有问题,复制一部分不是从第一个条目开始的数组。 我试着玩pBufPTR指针,但只能得到运行时错误。

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

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

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

复制最后3个元素:

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

您可以将要复制的第一个数组元素的(0基础)索引添加到传入的dataArray指针值中,指针将按索引倍数sizeof(double) 。 确保传入一个arrayLength值,该值反映要操作的元素数量,而不是原始数组长度。

例如,要复制最后10个元素(假设您已经检查了至少10个元素)…

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

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

 ReadDataArrayToMMF(&dataArray[20], 5, &myBufPTR);