1. 程式人生 > >棧(stack)上申請記憶體大小限制問題

棧(stack)上申請記憶體大小限制問題

#include <iostream> 

using namespace std;
long int count = 0;
void stack() 
{
  char msg[1024];  //加上static可以測試靜態儲存區的記憶體
  cout<<"count="<<count++<<endl;
  stack();
}
 
int main(void) 
{
  stack();
  return 0;
}

上面程式輸出的值大概就是棧能申請的最大記憶體,單位為k。

我們可以在終端用ulimit -a 察看stack記憶體的限制,得到結果為8192k(實際操作中不能申請到這麼大的記憶體)

用malloc是在堆上申請記憶體,申請的記憶體可能不是連續的,所以可以申請很大記憶體。但stack申請的記憶體是連續的,所以一次不能申請太多。

int main()
{
	//int stack[2097152]; //2097152*4=8192k(申請記憶體太大,出錯)
	int stack[2000000];  // 正確
	stack[0]=1;
	
	return 0;
}