系統對記憶體的限制:32位作業系統對程式理論上分配4g空間,64則是16g空間。
棧:可讀可寫rw,執行時申請記憶體,在所定義的空間括號結束後會自動被os**,一般用於區域性變數。
堆:可讀可寫rw,執行時申請(malloc),手動**(free),如果沒有釋放則可能會照成記憶體洩露。
記憶體洩露:在用完後沒有釋放該空間,別人也無法使用,就像是黑洞。
data:編譯時申請,程式結束時**。一般用於全域性變數,static修飾的區域性變數,字串常量。但一般最好少用,可以看做是程式不夠完美,技術不到家。
關鍵字:
資料型別關鍵字:char,short,in,long,float,double等,用於說明申請記憶體的大小和使用方式。
儲存型別關鍵字:(自動)auto(括號內寫放在棧區即區域性變數,括號外寫放在data即全域性變數),一般來說auto關鍵字可以省略: auto int a 相當於 int a
static當用到這個定義時,即是將其放在data區。
fun() 函式在編譯時分配記憶體,呼叫時不再分配。
register(暫存器)沒有位址,不再記憶體中。
其他volatile:防止編譯時優化 retrict:針對指標進行優化。
函式:printf:如果加\n 有強制輸出的作用
int main()
printf(「aaaa」); //將會將aaaa存起來不列印,直到函式結束才會輸出
while(1);
//程式將一直沒有輸出,但如果在程式後面加上\n 則將會輸出aaaa
需要了解printf只是乙個列印工具,可以將記憶體以你想看到的形式表達出來,如果出現亂碼,則表示想看的記憶體,沒法翻譯。
int b=;
printf(「%s\n」,b);
輸出結果為a,因為int是4個位元組,而在第乙個的4個位元組中,只是只在第乙個bit中放入了0x41,後面三個自動填充了0;
#include
int a;
int main()
int b;
printf(「%p,%p\n」,&a,&b);
在這個程式裡面b的位址不是固定的,每次執行程式時,其位址都會發生變化,因為它是存在棧中的,當執行完後,會消失,但是a的位址是固定的,放在data中,下次執行時只是在呼叫而已。
指標有粗細:
int a=0x41424344』
char *p_char=&a;
short *p_short=&a;
int *p_int=&a;
*p_char=0;
輸出*p_char的值顯示為0x41424300
*p_short=0;
輸出*p_short的值顯示為0x41420000
*p_int=0;
輸出*p_int的值顯示為0x00000000
這裡主要看你定義的是那種型別的指標,不同的型別其大小不同,粗細即表示的其大小。
二零一九年三月二十四日 自習
1.猜數字遊戲 srand為隨機數字發生器的初始化函式,用time函式防止隨機重複。define crt secure no warnings include include includeint main if num1 num printf 猜對了 n system pause return 0...
七月十三日 Linux作業系統c語言學習筆記
應該養成的習慣 新增必要的注釋,要有一定的版式。本次主要講了 學到的新的指令 1 objdump 專門用來檢視檔案的二進位制 如 objdump d a.out 2 chmod 改變某乙個檔案的許可權,分三種許可權 r,w,x 如 chmod a x.prog a 全部都修改 u 表示本人修改 us...
七月十六日 Linux作業系統c語言學習筆記
七月十六日 對陣列名取位址,位址值不變,但是型別變為指向整個陣列的位址。兩個相同型別的指標相減 位址之間相隔元素個數。堆 作業系統管理的空閒空間。函式內部定義的變數預設存在棧 動態 被用完就不見了被 遵守先進後出,後進先出的原則。auto 定義處到函式結尾,區域性作用域,沒有初始化,為隨機值。全域性...