CreateFileMapping

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Cユーザー

CreateFileMapping

#1

投稿記事 by Cユーザー » 12年前

以下のコードはmsdnにあったものですが
CreateFileMappingに関して、引数にあるサイズを表す上位DWORDとは
何なのでしょうか?

コード:

HANDLE CreateFileMapping(
  HANDLE hFile,                       // ファイルのハンドル
  LPSECURITY_ATTRIBUTES lpAttributes, // セキュリティ
  DWORD flProtect,                    // 保護
  DWORD dwMaximumSizeHigh,            // サイズを表す上位 DWORD
  DWORD dwMaximumSizeLow,             // サイズを表す下位 DWORD
  LPCTSTR lpName                      // オブジェクト名
);

文字列配列をメンバーに持つ構造体をマッピングさせ、配列に値を数千入れていくとエラーが発生します。このサイズを表すって所の数値を上げたらエラーにならなくなったので、おそらくメモリを確保していない領域に値をいれようとしたからだと思います。

この部分はどういう計算でメモリを取得しているのでしょうか?

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: CreateFileMapping

#2

投稿記事 by YuO » 12年前

Cユーザー さんが書きました:CreateFileMappingに関して、引数にあるサイズを表す上位DWORDとは
何なのでしょうか?
マッピング対象になるサイズ,64bitのうちの上位32bitです。
実際にマッピング対象になるサイズは,

コード:

dwMaximumSizeHight * 0x100000000ULL | dwMaximumSizeLow
となります。

コード:

(unsigned long long)dwMaximumSizeHight << 32 | dwMaximumSizeLow
と書いた方が分かり易いかもしれません。
Cユーザー さんが書きました:文字列配列をメンバーに持つ構造体をマッピングさせ、配列に値を数千入れていくとエラーが発生します。このサイズを表すって所の数値を上げたらエラーにならなくなったので、おそらくメモリを確保していない領域に値をいれようとしたからだと思います。
実際にメモリをコミットするのはMapViewOfFile APIの方です。
CreatFileMapping APIではありません。
エラーが何かによりますが,どれだけメモリを確保したかはちゃんと気にした方が良いですよ。

Cユーザー

Re: CreateFileMapping

#3

投稿記事 by Cユーザー » 12年前

申し訳ありません。ちょっともう少し深く聞いてみたいので、別途スレたてます。

ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る