我有一个存储在内存映射文件中的双精度数组,我想读取数组的最后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);