22
  • C++でプログラムのスタック/ヒープに割り当てられた最大メモリを増やすにはどうすればよいですか?

  • コンピュータの RAM を増やすと、コンピュータ プログラムのスタック/ヒープ メモリが自動的に増えますか?

4

5 に答える 5

6

Second edit: I see from your comment that you work in Windows, so my Unix answer below would not be very helpful to you. But see Determining Stack Space with Visual Studio and C/C++ maximum stack size of program.

The stack size is quite often limited in Linux. The command ulimit -s will give the current value, in Kbytes. You can change the default in (usually) the file /etc/security/limits.conf.

You can also, depending on privileges, change it on a per-process basis using setrlimit(). See for example my answer to Segmentation fault: Stack allocation in a C program in Ubuntu when bufffer>4M.

For heap, see e.g Heap size limitation in C. But I don't believe you can increase or decrease the maximum size.

于 2012-12-19T02:58:52.597 に答える
5

Visual Studio のリンク オプション /Heap および /Stack を使用して、予約済みのヒープ サイズとスタック サイズを指定できます。詳細については、次の MSDN 記事を確認してください。

  1. ヒープ割り当て
  2. スタック割り当て
于 2012-12-19T03:01:44.020 に答える
3

プロセスのヒープ サイズは、通常、プロセスが割り当てることができる最大メモリによって制限されます。ヒープが連続している必要はない (malloc(1000000000) のようなことをしている場合を除く) ため、ヒープは使用可能なアドレス空間のほとんどを使用できます。

Windows では、最大プロセス サイズはいくつかの要因によって異なります。

32 ビット Windows を使用すると、32 ビット プロセスはデフォルトで 2 GB を割り当てることができます。Windows が /3GB スイッチを使用して起動され、プロセスが「Enable Large Addresses」リンカー フラグを使用してコンパイルされている場合、プロセスは 3 GB を割り当てることができます。

64 ビット Windows を使用すると、32 ビット プロセスはデフォルトで 2 GB を割り当てることができます。プロセスが「大きなアドレスを有効にする」とリンクされている場合、64 ビット Windows では 32 ビット プロセスに 4 GB を割り当てることができます。

64 ビット プロセス (64 ビット Windows 上) は、16,000 GB 程度を割り当てることができます。

于 2012-12-19T04:14:10.413 に答える