
No.2ベストアンサー
- 回答日時:
回答No.1に挙げた「デスクトップ ヒープ」で用いている「ヒープ」という用語は、グラフィックサブシステムで使用するためにWindowsのグラフィックサブシステムがあらかじめ確保して自分自身のために使用するメモリ領域のことを指しています。
また「mallocが使用するヒープ領域」という場合の「ヒープ」という用語は、ライブラリ関数mallocがWindows APIを使用して確保するメモリ領域のことを指しています。
ですので、「デスクトップ ヒープ」と「mallocが使用するヒープ領域」は違うものです。
「mallocが使用するヒープ領域」がどこから来るのかは、コンパイルに使用した言語環境のライブラリ関数mallocの動作内容に依存します。
仮にMicrosoft Visual C++(VC++ Version 6.0以降)を使用してコンパイルし、ライブラリ関数は標準添付のものを使用したとすると、mallocはWindows APIのHeapAllocで取得したメモリ領域をライブラリ内で細分(サブアロケート)して返します。またこの場合、HeapAllocで取得できるメモリ領域の量に固定の上限はなく、PCのメモリ実装量、Windowsのスワップ領域の大きさ、それとアプリケーションプロセスのメモリマップが許す限り、いくらでもHeapAllocはメモリを割り当てて返すことができます。
ですので上記の場合、mallocも同様に「PCのメモリ実装量、Windowsのスワップ領域の大きさ、それとアプリケーションプロセスのメモリマップが許す限りいくらでも」メモリを割り当てて返すことができます。
なお、上記動作はライブラリのソースコードを見て確認したものですので、使用しているコンパイラがVC++ではない、あるいはVC++でもVersion 6.0より古い場合、mallocが「いくらでもメモリを割り当てて返すことができる」かどうかは分かりません。(しかし、返すメモリ領域が「デスクトップ ヒープ」と違うものであることだけは変わりません。)
有難うございます。
ようは通常、2G以内であればメモリを割り当てられるっということになりますね。
物理メモリが4G以上あれば設定でもう少し大きくできそうですが。
No.1
- 回答日時:
質問の意図がよく分からないのですが、ヒープ領域を広げておかないとメモリ割り当てに失敗するんでしょうか。
よっぽど特殊なコードを書かない限り、2GB弱まで自動的にメモリ割り当てが行われるはずなのですが。http://support.microsoft.com/default.aspx?scid=k …
このKBにある「デスクトップ ヒープ」のことを指しているのだとすれば、このヒープは「アプリケーションがグラフィックオブジェクトを作成するときに、グラフィックサブシステムがOSに要求するメモリ領域」であって、「アプリケーションがOSに対して要求するメモリ領域」とは違うものです。
参考:
http://www.atmarkit.co.jp/fwin2k/win2ktips/071de …
なお、ウィンドウやコントロールやGDIオブジェクトを山のように作成するアプリケーションであれば、デスクトップヒープを使い果たすという可能性もなくはありません。念のため。
この回答への補足
回答有難うございます。
特殊なコードかどうかは不明(開発者が別)です。ただしそのアプリケーションが小さいファイルを読み込んでいるときは問題を起こさないのですが。
巨大なファイルを読み込ませるとアクセス違反を起こしています。
そもそもmallocした後処理の問題があるのは十分承知しているのですが、
修正されるまでの逃げ手としてヒープの拡張を考えていました。
>「アプリケーションがOSに対して要求するメモリ領域」とは違うものです
Windowsアプリケーション内で使用するmallocはヒープ領域を使用すると
思い込んでいたのですが、違っていますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- デスクトップパソコン ん~…分からん 7 2022/06/10 10:47
- ビデオカード・サウンドカード PC版:スーパーロボット大戦30 推奨環境を満たしておりますが、動作(処理)が遅いかもしれません。 1 2023/01/26 13:45
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- デスクトップパソコン intel hdグラフィックス3000 4 2022/10/03 14:14
- UNIX・Linux VirtualBox ゲストOSにPC内蔵HDDのパーティションをマウントする方法は? 2 2023/05/06 22:52
- 大学受験 大学受験に関することです 小論文の添削をお願いしたいです。 テーマは、人 口 減 社 会 を 迎 え 1 2022/06/29 15:04
- 大学受験 大学受験に関することです 小論文の添削をお願いしたいです。 テーマは、人 口 減 社 会 を 迎 え 3 2022/06/29 16:58
- ノートパソコン あなたのパソコン(Windows限定)は何年使っていますか? 4 2023/05/27 08:04
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
allocってなんですか?
-
行列内の行の交換,列の交換を...
-
C++のnewで確保したメモリーの...
-
malloc呼び出し時のセグメンテ...
-
構造体でchar name[]と*nameの...
-
ヒープメモリの解放について
-
LoadLibraryでAccess Violation...
-
指定したメモリアドレスの値の...
-
メモリ不足になってしまう。
-
配列の添え字の最大数とは?
-
スタック破壊の上手な見つけ方...
-
文字列のメモリ保持期間とポイ...
-
CreateFileMapping について
-
C言語 配列の長さの上限
-
init関数の意味
-
ポインターの使用法や利点
-
配列の要素数に変数を入れたい...
-
セグメントエラー
-
getchar,isalphaについて
-
CStringからchar*への型変換に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
malloc呼び出し時のセグメンテ...
-
入れ子になった構造体について
-
ヒープメモリの解放について
-
ビットをローテートするプログ...
-
C++で、メンバもヒープに確保さ...
-
void*型のデータサイズ
-
Win32APIでのメモリ管理について
-
配列の添え字の最大数とは?
-
C++のnewで確保したメモリーの...
-
プログラムが途中で強制終了し...
-
C言語 mallocとfreeについて
-
win32APIのHeapAlloc()の使い方...
-
LoadLibraryでAccess Violation...
-
グローバル変数のサイズ
-
MFCのCStringについて
-
メモリ不足になってしまう。
-
ヒープの実際の限界値は?
おすすめ情報