Windows 32 ビットおよび 64 ビット マシンでは、ライブ ストリーミング中の大量のデータ (合計約 1 GB) を格納するためにメモリを割り当てる必要があります。malloc() を使用すると、仮想メモリ アドレスを取得することになりますが、メモリの量によっては、このアドレスが実際にハード ドライブへのページングを引き起こす可能性があります。残念ながら、HD がパフォーマンスに影響を与え、データが失われるのではないかと心配しています。
十分なメモリが利用できない場合にエラーが発生することを意味する場合でも、メモリを RAM にのみ割り当てるように強制する方法はありますか (そのため、ユーザーは他のものを閉じるか、別のマシンを使用する必要があります)。すべての操作がメモリ内で行われることを保証したいと思います。これが失敗した場合は、アプリケーションを強制的に終了してもかまいません。
別のプロセスが入ってきて、それ自体がメモリを消費する可能性があることはわかっていますが、このマシンではそれが発生していないため、心配していません (マシン上でこの大きな割り当てを行うアプリケーションはこれだけです)。
[編集:] これまでの私の試みは、次のように VirtualLock を使用することでした:
if(!SetProcessWorkingSetSize(this, 300000, 300008))
printf("Error Changing Working Set Size\n");
// Allocate 1GB space
unsigned long sz = sizeof(unsigned char)*1000000000;
unsigned char * m_buffer = (unsigned char *) malloc(sz);
if(m_buffer == NULL)
{
printf("Memory Allocation failed\n");
}
else
{
// Protect memory from being swapped
if(!VirtualLock(m_buffer , sz))
{
printf("Memory swap protection failed\n");
}
}
ただし、ワーキング セットの変更は失敗し、VirtualLock も失敗します。Malloc は null 以外を返します。
[編集2]私も試しました:
unsigned long sz = sizeof(unsigned char)*1000000000;
LPVOID lpvResult;
lpvResult = VirtualAlloc(NULL,sz, MEM_PHYSICAL|MEM_RESERVE, PAGE_NOCACHE);
しかし、lpvResult は 0 なので、運もありません。