共有メモリへのマッピング(MapViewOfFile)について
共有メモリについて(特にMapViewOffileについて)教えてください。
ある構造体と、あるデータAを共有メモリへマッピングしたい考えています。
構造体は、
typedef struct _Data {
int length;
long data;
char mIntArrayData[256];
} Data;
データAは、short型の配列(要素数はx*y*z,x,y,zはcsvファイル等から読み込む)で、サイズをdatasize = sizeof(short) * x * y * z;とします。
この2つを使って、
両方のデータを
long AllDataSize = sizeof(Data) + datasizeとしました。
このサイズを使って、共有メモリのマップハンドルを
hMap = CreateFileMapping(INVALID_HANDLE_VALUE,
NULL,PAGE_READWRITE,AllDataSize,MAPPED_FILE_NAME); (MAPPED_FILE_NAMEは、 メモリマップドファイルの名前)
で、生成しました。
生成はできたのですが、データAにアクセスするための下記のような時にマッピングに失敗してしまいました。
DWORD dwOffset = sizeof(DATA);
short *pData = (short *)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, dwOffset, Bytes);
(Bytesはマッピングしたいバイト数でsizeof(short)の倍数)
次のようなDATAにアクセスするマッピングには成功しています。
DWORD dwOffset = 0;
DATA *pDATA = (DATA *)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, dwOffset, sizeof(DATA));
色々なサイト等を調べて、考えてみたのですが、怪しいところはdwOffsetと、CreateFileMappingで、マッピングしたい全体のファイルサイズを、構造体とデータAのサイズの単純な足し算としているところと考えています。ただ、はっきりとした答えが全くわからないので、どうか御教授お願いします。
お礼
ありがとうございました。 自由曲面パートと閉じた線形状に別々にマッピングしてもいいのですね。 自由曲面にしたら、必ず一点に収束をするものかと思っていました。 やってみます。