當前位置:首頁 » 編程語言 » c語言增加內存
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言增加內存

發布時間: 2022-01-25 06:03:28

c語言如何申請內存

1.calloc
=
2malloc
+
memset
3與4是連續的,但是他們方式不一樣,3你是通過new出來的和malloc一樣,它申請的堆中的內存,需要手動釋放。而4char
t[10]如果你是在函數里用到就是在棧里申請的,出函數會自動釋放,如果是在文件開頭的全局變數那就是在靜態存儲
就這點區別

② c語言中,如何申請較大的內存空間

用malloc應該可以的吧

再不行,用靜態的,如p[512*1024*1024]
聲明成全局的,因為局部變數在棧中,棧沒有這么大

③ C語言中如何動態增加內存空間

有一個malloc函數,專門用來進行動態內存管理的

④ C語言 如果用malloc 申請一塊內存,但執行的時候發現它不夠用了,怎麼在給這塊內存擴充大小呢

用realloc可以重新分配空間

⑤ 用C語言分配開辟內存問題

你的代碼不是C的,其實現在語言比較強大,也許在內存回收上做了完善,我不會C++,我知道JAVA語言,他本身在內存回收上面做了優化,就是在堆中申請的內存,操作系統沒回收,但JAVA語言最終編譯成可運行碼的時候,回收了這塊內存(JAVA的垃圾回收機制,蠻強的,不過我不太喜歡)。你可以試試用C寫,用malloc 來申請,這個應該不會被回收的,你可以試試,當然可能和其它原因有關。

最後如果你想學習內存管理的話,方向是:操作系統理論中的頁式內存管理,地址的印射這2部分是理論(比較簡單,實際情況比這復雜一點,先看理論比較好)
等真的明白了(應該不難懂),下面就有難度了,選一個比較流行的CPU的地址映射(各種不同的CPU地址映射是不一樣的),我看的是intel 80386後出現的保護模式(其實是286後出現的,不過286沒什麼名氣),以及linux中內存管理的源代碼(記得結合書看,直接看代碼很難懂)。
==========================================

你的問題算是有點難度和深度的。

關於內存開辟問題,在linux中有個很特殊的內存段,它的大小是8K,我們叫他系統堆棧空間,任何一段程序代碼在運行時候它都是一個進程,它都會有這么一個8K的系統堆棧空間。局部變數都是放在這樣一個8K空間中,包括int a,int a[100], int *a.他們都放在這里。

那麼第一個問題就回答了,int a就是放在系統堆棧空間中。當這個進程死亡的時候,會有其它的進程來回收這個空間(它自己會指定的,一般是其父進程),所以你不需要自己手動去釋放局部變數佔地內存。

至於int * a;然後你new一個空間這個就有點不同了,首先 * a還是個局部變數,他是存在於系統堆棧中。不過它存的比較特殊是一個邏輯地址,不是一個值(其實邏輯地址也就是一個無符號的16位整數而已)。當你new 的時候,會在堆空間中開一個空間,並把這個空間的地址放到剛那個 a中去。很明顯新申請的空間不是在系統堆棧空間中,父進程(一般是)是不會回收這個內存的,這就是為什麼你要自己 free(a) 這樣來釋放空間。

我們常說局部變數不要過大,比如int a[10000]這是不允許的,可以看出來只有8K的大小的內存,而且他還不全部都是給局部變數使用,他有相當一部分內存是給進程式控制制塊和中斷返回現場用的(讀過linux源代碼你就清楚了),另外C語言不檢查數組邊界,如果你int a[4]數組,而不顧一切的向這個數組上放東西,你就有可能很運氣的把中斷的返回地址給沖掉,聰明的人會放一個新的返回地址進去,而這個地址返回一個惡意的進程。知道會發生什麼了,這就是緩沖區溢出攻擊。

windows雖然不太一樣,但原理差不多。

⑥ c語言求修改,內存一直在增加。

for(i=0;i<m;m++){
p[i]=(int*)malloc(sizeof(int)*n);
}

改成

for(i=0;i<m;i++){
p[i]=(int*)malloc(sizeof(int)*n);
}

⑦ c語言動態數組如何擴充空間

c語言動態數組擴充空間,主要是利用動態存儲分配庫函數來實現的,常用的有malloc函數和calloc函數。

malloc()是C語言中動態存儲管理的一組標准庫函數之一。其作用是在內存的動態存儲區中分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。

例如:

char *x;

x = (char *)malloc(10); //x就指向了包含10個字元單元的存儲空間。

(7)c語言增加內存擴展閱讀:

函數定義

其函數原型為void *malloc(unsigned int size);其作用是在內存的動態存儲區中分配一個長度為size的連續空間。此函數的返回值是分配區域的起始地址,或者說,此函數是一個指針型函數,返回的指針指向該分配域的開頭位置。

如果分配成功則返回指向被分配內存的指針(此存儲區中的初始值不確定),否則返回空指針NULL。當內存不再使用時,應使用free()函數將內存塊釋放。函數返回的指針一定要適當對齊,使其可以用於任何數據對象。

⑧ c語言分配內存方式有哪些

內存分配方式有三種:

1、從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在。例如全局變數,static變數。
2、在棧上創建。在執行函數時,函數內局部變數的存儲單元都可以在棧上創建,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集中,效率很高,但是分配的內存容量有限。
3、從堆上分配,亦稱動態內存分配。程序在運行的時候用malloc或new申請任意多少的內存,程序員自己負責在何時用free或delete釋放內存。動態內存的生存期由程序員決定,使用非常靈活,但如果在堆上分配了空間,就有責任回收它,否則運行的程序會出現內存泄漏,頻繁地分配和釋放不同大小的堆空間將會產生堆內碎塊。

⑨ c語言 分配超大內存

用文件內存映射,這樣系統就會把文件作為內存使用,文件有多大你虛擬出來的內存就有多大

⑩ C語言 隨著讀取內容的擴大分配更多的內存

文件大小是指文件裡面內容所佔的位元組數。
可以邊讀取邊分配。
用struct比較好,
typedef struct
{
double num1;
double num2;
char str[48];
}st_data;