C 編譯的陣列最大長度討論

2021-09-02 23:16:11 字數 1132 閱讀 3916

參考

陣列的分配方式大概有兩種方式:靜態分配和動態分配。根據陣列宣告的位置,我們可以將陣列分為區域性陣列和全域性陣列。這樣就有,靜態分配的區域性陣列、動態分配的區域性陣列、靜態分配的全域性陣列、動態分配的全域性陣列。

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...