參考
陣列的分配方式大概有兩種方式:靜態分配和動態分配。根據陣列宣告的位置,我們可以將陣列分為區域性陣列和全域性陣列。這樣就有,靜態分配的區域性陣列、動態分配的區域性陣列、靜態分配的全域性陣列、動態分配的全域性陣列。
1、棧區(stack)— 由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。
2、堆區(heap) — 一般由程式設計師分配釋放。
3、全域性區(靜態區)(static)—,全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域, 未初始化的全域性變數和未初始化的靜態變數在相鄰的另 一塊區域。 - 程式結束後由系統釋放。
4、文字常量區 —常量字串就 是放在這裡的。 程式結束後由系統釋放
5、程式**區—存放函式體的二進位制**。
int a = 0; // 全域性初始化區
char *p1; // 全域性未初始化區
main()
{
int b; //棧
char s = "abc"; //棧
char *p2; //棧
char *p3 = "123456"; //123456/0在常量區,p3在棧上。
static int c =0; //全域性(靜態)初始化區
p1 = (char *)malloc(10);
p2 = (char *)malloc(20); //分配得來得10和20位元組的區域就在堆區。
strcpy(p1, "123456");
// 123456/0放在常量區,編譯器可能會將它與p3所指向的"123456" 優化成乙個地方。
總而言之,
函式內申請的變數,陣列,是在函式棧(stack)中申請的一段連續的空間。棧的預設大小為2m或1m。
全域性變數,全域性陣列,靜態陣列(static)則是開在全域性區(靜態區)(static)。大小為2g。
而malloc、new出的空間,則是開在堆(heap)的一段不連續的空間。理論上則是硬碟大小。
char陣列最大長度
q 請問char陣列最大能多少?是否無法超過1024?我指定char test 300 1024 的時候沒有任何問題,而char test 1024 1024 就會出錯,是否char無法超過1024 1024?因為我需要在程式執行中,讀取乙個檔案到記憶體,而檔案大小不固定,大多數時候超不過300k,...
陣列中子陣列等於k的最大長度
假定有陣列arr 4 求出陣列中子陣列中等於12的最大長度。建立乙個hash表,其key等於陣列中遍歷過的數的和,其value等於當前遍歷的數在陣列中的下標。用sum儲存遍歷過的數的總和,len儲存最大長度 依次從陣列的開頭遍歷,如果sum k的值在hash表中有記錄,則len更新為i map su...
C 求數值陣列的絕對增大子陣列的最大長度
這道題是網路中心某題。雖然簡單但是有點點小心機,就是處理指標溢位的部分。演算法思想如下 1 長度為n的陣列要找到絕對增大的子陣列要經過n 1次比較。2 設定三個指標,乙個記錄子陣列起始位址,乙個記錄終止位址,乙個為比較數值的指標 總是在終止指標的下乙個位置或者重合 3 不斷比較指標所指位址的值,若a...