七月二十四日 Linux作業系統c語言學習筆記

2021-07-04 02:02:33 字數 1435 閱讀 5987

系統對記憶體的限制: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 定義處到函式結尾,區域性作用域,沒有初始化,為隨機值。全域性...