以下のような方法でヒープのメモリ確保を行っています。
struct symbol {
char aaa[32] ;
short bbb ;
short ccc ;
int ddd ;
int eee ;
int fff ;
short ggg ;
short hhh[6][2] ;
short iii ;
short jjj ;
short kkk ;
short lll ;
short mmm ;
char nnn[32] ;
} ;
typedef struct symbol Symbol ;
・
・
HANDLE AAA ;
Symbol *sym_pt;
AAA = HeapCreate( 0, 0, 0 ) ;
sym_pt = (Symbol *)HeapAlloc( AAA, HEAP_ZERO_MEMORY, 10 * sizeof(Symbol) ) ;
・
・
この方法でメモリを確保したアプリケーションを
動かしたまま、他のアプリケーションが動作すると
メモリ確保をしたアプリケーションのメモリ使用量が
4Kずつ上がってしまいます。
なぜこうなってしまうのかご教授下さい。
Windows2000、VC++6.0、MFC使用
>この方法でメモリを確保したアプリケーションを
>動かしたまま、他のアプリケーションが動作すると
>メモリ確保をしたアプリケーションのメモリ使用量が
>4Kずつ上がってしまいます。
どのようにして確認なさったのですか?
特に特定のアプリケーションのメモリーの使用量が増えるということが何故いえるのですか?
ほかのアプリケーションがいないときにはどうなるんですか?
などなど、分らないことが多くて、あなたの報告なさった内容だけで原因の分る人はそう
多くないと思います(私には見当もつかない)
HeapAllocのHelpに下記のようになってましたけど
関数が成功すると、要求したバイト数と同じか、要求したバイト数よりも多くのメモリが確保さ
れます。要求したバイト数よりも多くのメモリが確保された場合、アプリケーションは、そのメ
モリをすべて使用できます。実際に確保されたバイト数を調べるには、HeapSize 関数を使用し
ます。
ここからは私の意見
OSのメモリ管理方法によると思うのですが1バイト単位でメモリ管理をしているはずはないと
思います。
FATなんかでも数Kバイト単位で管理してましたよね。
メモリも同じように最低限のエリア単位で管理してるんじゃないですか。
>メモリも同じように最低限のエリア単位で管理してるんじゃないですか。
NT系OSの場合、x86 アークテクチャのプロセッサでは、物理メモリのページサイズ
は 4KB だったと思います。
>NT系OSの場合、x86 アークテクチャのプロセッサでは、物理メモリのページサイズ
は 4KB だったと思います。
そうですね。
あの後本(Win32API完璧マスタ)で調べましたがページ内オフセットが12ビットのた
め4K単位のページとして扱われると書いてありました。(178ページ参照)