靜態記憶體和動態記憶體,C語言

2021-07-05 13:22:08 字數 2320 閱讀 8471

#include

#include

int main ()

p[0]='a';

free(p);

//釋放就是登記登出;

//占有空間就是登記一下

//當free()釋放後;所以除非程序結束,否則空間是不會釋放的

return 0;}//

#include

int *func(void)

//如果建立不成功的時候;

return p;

}int main(void)

#include

int main(void)

return 0;

}靜態記憶體空間:編譯器首先讀的是int 等的資料型別 ;編譯器在編譯時,先讀的是有幾個資料型別;根據多少變數

這些資料型別加起來是多少位元組數,需要開闢多少記憶體空間;先開了main棧內的記憶體空間;

main 棧裡的區域性變數有多大

typedef int  int_t

type struct

通過程式,操作檔案;檔案在硬碟;內部儲存:cpu,記憶體條,擴充套件記憶體條;

讀  檔案->記憶體

寫  記憶體->檔案

fileopen 

file* fopen(const void *restrict ptr,size_t size,size_t nite ms,file *restrict stream);

file *結構體 ==>是乙個結構體的巨集;

#include

#include

int main()

//file可能不存在,可能臨時刪掉了,還有有沒有許可權去開啟file

但是程式是沒有許可權的,許可權是使用者的,user的,如果說chmod -r file;許可權拒絕

permission denied 許可權拒絕;

sudo whoami;//聽著像so do who am i在這一瞬間獲得root 許可權;root許可權是根目錄許可權

可以開啟所有檔案;

執行這個程式的使用者,他的許可權才是開啟這個檔案的前提;

讀取有乙個函式叫做size_t fread(void *restrict ptr,size_t size,size_t nitems 

file)

char buf[64]={};

fread(buf,1,63,fp);fp就代表著檔案//任意位址;

size_t ret=fread(buf,1,63,fp);

printf("%s,%d"); 

fclose(fp);

return;

}#include

int main(void)

fwrite("hello qianfeng\n",1,strlen("hello qianfeng"),fp);

fwrite("hello qianfeng\n",1,strlen("hello qianfeng"),fp);   

而是往開啟的檔案中追加內容;

//第乙個fwrite

fclose(fp);

return 0;

}寫乙個檔案copy的內容

#include

#include //標準庫裡面已經定義好的一些巨集file,typedef等size_t

//在檔案操作過程中直接引用;

int main(void)

file *fp2=fopen("fopen_2","w");

if(!fp2)

while (1)

fclose(fp);

fclose(fp2);

return;

}char

空間占用都是10001個位元組;

陣列占有多大的空間是我們編譯**的時候決定是10001個位元組

堆段;棧段;

棧空間:靜態記憶體空間;空間是編譯**的時候決定的;

是編譯器在讀取main棧中的區域性變數有多大;

由編譯器決定的,在不同編譯器下,靜態記憶體是不同的

棧 資料 唯讀資料段//程式結束

自動釋放;

當main棧產生之後;是不會修改的,固定了的

動態記憶體空間:空間大小是執行時決定的

由程式設計師分配的

堆段手動寫free()釋放就可以了     

動態記憶體空間先讀乙個數;

int n;

int i=0;

while(i++<100)

scanf("%s",buf);

printf("%s\n",buf);

free(buf);//立即釋放;可以隨時調整我空間的大小

}return 0; 

}

C語言 靜態記憶體分配和動態記憶體分配

靜態記憶體是直接變數等於什麼什麼。malloc int 返回值為記憶體位址,記憶體位址長度為4個位元組 指標的長度 一般先申明乙個指標不對他進行賦值,用malloc int 返回值賦給這個指標,手動申請的記憶體用free temp指標名 函式 陣列第一次分配的記憶體還是不夠用時,使用realloc ...

C語言靜態記憶體分配與動態記憶體分配

c語言中,記憶體主要分為5個區,分別為棧區 堆區 全域性 靜態儲存區 常量儲存區 區。其中 區存放源程式的二進位制 其餘四個區都儲存程序執行過程中需要的儲存的變數。變數的記憶體分配有兩種 靜態與動態。靜態記憶體分配在編譯時就對變數分配空間,而動態記憶體分配直到程式執行時再進行分配。使用靜態記憶體分配...

c語言動態記憶體分配 C 動態記憶體分配

動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...