Cで書き込む場合、プログラムを起動したときにメモリで使用可能なスタックスペースを確認するにはどうすればよいですか?ヒープスペースはどうですか?
プログラムの実行中に使用されているメモリの量を確認するにはどうすればよいですか?
Cで書き込む場合、プログラムを起動したときにメモリで使用可能なスタックスペースを確認するにはどうすればよいですか?ヒープスペースはどうですか?
プログラムの実行中に使用されているメモリの量を確認するにはどうすればよいですか?
教育的または情報的な理由ではなく、実用的な理由でこの種の質問をする必要がある場合、あなたは深刻な問題を抱えているという哲学があります。
エラーチェックやプログラムに十分なメモリがあることを確認するためにこれを要求している場合は、など...それなら、真剣に心配しないでください。プログラムのメモリに関しては、これがデバッグ専用の場合は、タスクマネージャ(Windows上)を使用できます。あなたがあなたのプログラムでこれを知る必要があるならば、私はどんな非ハッキーな解決策も当てにしないでしょう。
これはすべてWin32固有です(実際にはC固有ではなく、すべてOS APIのみです)。
スレッドが作成されると、デフォルトで1MBのスタックスペースが取得されます。これにより、使用するCreateThreadAPIで変更できます。
スレッド情報ブロックを調べて実際のスタック情報を見つけることができますが、これは文書化されていますが、この手法は公式にはサポートされていません。http://en.wikipedia.org/wiki/Win32_Thread_Information_Blockを参照してください。
また、32ビットアプリケーションの場合、アドレス指定できるのは最大2 GBまでです。したがって、設計上大量のメモリを使用するアプリの場合、注意すべき点は、プロセスの仮想アドレス空間の合計サイズ(コミット済み+予約済み)、これにはすべてのヒープ割り当てが含まれます。GlobalMemoryStatusEx APIを使用して、プログラムでプロセスの仮想メモリにアクセスできます。仮想アドレス空間のullTotalVirtualパラメータを確認してください。プロセスが1.8GBまたは1.9GBのVASに近づくと、ヒープ割り当てとVirtualAlloc呼び出しは失敗し始めます。「通常の」アプリの場合、VASが不足することを心配する必要はありませんが、割り当ての失敗をチェックすることは常に良いことです。また、バグや悪いデザインがない限り、スタックオーバーフローが発生することはありません。
理由による抽象化 実際、あなたのプログラムはこれを懸念すべきではありません。これはOSの懸念事項であり、問題は必要なものだけで効率的であり、OSにその仕事を任せる必要があります。
あなたが主張するなら、あなたは、、、/proc/meminfo
そしてbrk()
(getrlimit()
ここsetrlimit()
にいくつかのドキュメントがあります)近似とラフっぽさのためのRLIMIT_STACK
と値で調べることができます。RLIMIT_DATA
#include <sys/resource.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main (int argc, char *argv[])
{
struct rlimit limit;
/* Get the stack limit. */
if (getrlimit(RLIMIT_STACK, &limit) != 0) {
printf("getrlimit() failed with errno=%d\n", errno);
exit(1);
}
printf("The stack soft limit is %llu\n", limit.rlim_cur);
printf("The stack hard limit is %llu\n", limit.rlim_max);
exit(0);
}
ここから変更されたman getrlimit
システムも参照してください
あなたがこれをしたいことと理由を述べるならば、誰かがあなたがしたいことをするより良い方法または方法を持っているかもしれません。