-
使用調試功能 gcc -g
gdb ---> 斷點調試,單點調試
gcc -g 文件名.c -o 文件名.out ---> 使用gdb編譯
gbd ./文件名 ---> 開始執行db調試
l:(list)列出源碼
回車繼續執行剛剛的命令
start ---> 開始執行
break n ---> 截取第n行斷點
print或p a ---> 打印輸出變量a
n ---> 跳到下一行繼續執行
s ? ---> step 跳入函數
bt ---> 查看函數堆棧
f ---> 切換函數堆
f 1 ---> 跳轉到函數1
q ---> 退出調試
查看全部 -
32位bit:內存編號只能編到32個二進制位
操作系統:管理內存,編號,規劃。
用戶內存隔離開的好處:
操作系統的內存不會被大量占用
避免機器卡住/卡死/死機等狀態
可通過操作系統把應用關閉
使得操作系統更安全
查看全部 -
棧:先進后出,后進先出。由高地址向低地址放入,先放入的后出,后放入的先出。
先放入的分配的內存大于后放入的。
字節順序是指占內存多于一個字節類型的數據在內存中的存放順序,通常有小端、大端兩種字節順序。小端字節序指低字節數據存放在內存低地址處(由右向左),高字節數據存放在內存高地址處;大端字節序是高字節數據存放在低地址處,低字節數據存放在高地址處(由左向右)。
示例中的Linux棧內用的就是小端存儲(as高字節存放高地址,由上到下)。
查看全部 -
變量只是一個名稱,來表示一個內存的地址的簡稱,(變量就是內存)
而指針則是將變量(對于我們)與地址本質的轉化,
更利于理解。
堆棧段:
1. 為函數內部的局部變量提供存儲空間。
2. 進行函數調用時,存儲“過程活動記錄”。
3. 用作暫時存儲區。如計算一個很長的算術表達式時,可以將部分計算結果壓入堆棧。
數據段(靜態存儲區):
包括BSS段(Block Started by Symbol)的數據段。BSS段存儲未初始化或初始化為0的全局變量、靜態變量,具體體現為一個占位符,并不給該段的數據分配空間,只是記錄數據所需空間的大小。數據段存儲經過初始化的全局和靜態變量。
查看全部 -
變量只是一個名稱,來表示一個內存的地址的簡稱,(變量就是內存)
而指針則是將變量(對于我們)與地址本質的轉化,
更利于理解。
形象比喻:內存是一個酒店,每個變量就是房間的門牌,通過指針對門牌來找到地址,從而取得里面的東西。
堆棧段:
1. 為函數內部的局部變量提供存儲空間。
2. 進行函數調用時,存儲“過程活動記錄”。
3. 用作暫時存儲區。如計算一個很長的算術表達式時,可以將部分計算結果壓入堆棧。
數據段(靜態存儲區):
包括BSS段(Block Started by Symbol)的數據段。BSS段存儲未初始化或初始化為0的全局變量、靜態變量,具體體現為一個占位符,并不給該段的數據分配空間,只是記錄數據所需空間的大小。數據段存儲經過初始化的全局和靜態變量。
查看全部 -
變量只是一個名稱,來表示一個內存的地址的簡稱,(變量就是內存)
而指針則是將變量(對于我們)與地址本質的轉化,
更利于理解。
形象比喻:內存是一個酒店,每個變量就是房間的門牌,通過指針對門牌來找到地址,從而取得里面的東西。
堆棧段:
1. 為函數內部的局部變量提供存儲空間。
2. 進行函數調用時,存儲“過程活動記錄”。
3. 用作暫時存儲區。如計算一個很長的算術表達式時,可以將部分計算結果壓入堆棧。
數據段(靜態存儲區):
包括BSS段(Block Started by Symbol)的數據段。BSS段存儲未初始化或初始化為0的全局變量、靜態變量,具體體現為一個占位符,并不給該段的數據分配空間,只是記錄數據所需空間的大小。數據段存儲經過初始化的全局和靜態變量。
查看全部 -
變量只是一個名稱,來表示一個內存的地址的簡稱,(變量就是內存)
而指針則是將變量(對于我們)與地址本質的轉化,
更利于理解。
形象比喻:內存是一個酒店,每個變量就是房間的門牌,通過指針對門牌來找到地址,從而取得里面的東西。
堆棧段:
1. 為函數內部的局部變量提供存儲空間。
2. 進行函數調用時,存儲“過程活動記錄”。
3. 用作暫時存儲區。如計算一個很長的算術表達式時,可以將部分計算結果壓入堆棧。
數據段(靜態存儲區):
包括BSS段(Block Started by Symbol)的數據段。BSS段存儲未初始化或初始化為0的全局變量、靜態變量,具體體現為一個占位符,并不給該段的數據分配空間,只是記錄數據所需空間的大小。數據段存儲經過初始化的全局和靜態變量。
查看全部 -
變量只是一個名稱,來表示一個內存的地址的簡稱,(變量就是內存)
而指針則是將變量(對于我們)與地址本質的轉化,
更利于理解。
形象比喻:內存是一個酒店,每個變量就是房間的門牌,通過指針對門牌來找到地址,從而取得里面的東西。
堆棧段:
1. 為函數內部的局部變量提供存儲空間。
2. 進行函數調用時,存儲“過程活動記錄”。
3. 用作暫時存儲區。如計算一個很長的算術表達式時,可以將部分計算結果壓入堆棧。
數據段(靜態存儲區):
包括BSS段(Block Started by Symbol)的數據段。BSS段存儲未初始化或初始化為0的全局變量、靜態變量,具體體現為一個占位符,并不給該段的數據分配空間,只是記錄數據所需空間的大小。數據段存儲經過初始化的全局和靜態變量。
查看全部 -
*p;指針指向的變量值
?&p;指針自己所在的地址
標準的C語言中,不允許直接對內存地址進行操作,只能是對操作系統已經分配給的內存空間進行操作。(防止用戶自己操作內存地址時侵吞系統內存或者其他程序的內存)
指針保存的是什么?指針保存的就是內存的地址
查看全部 -
計算機是由邏輯電路元件來組成的
計算用二進制
顯示為十進制
編程用十六進制
內存中最小的單位是字節 1Byte=8bit
一個十六進制的數字,就可以表示4位二進制數字
查看全部 -
使用調試功能 gcc -g
gdb ---> 斷點調試,單點調試
gcc -g 文件名.c -o 文件名.out ---> 使用gdb編譯
gbd ./文件名 ---> 開始執行db調試
l:(list)列出源碼
回車繼續執行剛剛的命令
start ---> 開始執行
break n ---> 截取第n行斷點
print或p a ---> 打印輸出變量a
n ---> 跳到下一行繼續執行
s ? ---> step 跳入函數
bt ---> 查看函數堆棧
f ---> 切換函數堆
f 1 ---> 跳轉到函數1
q ---> 退出調試
查看全部 -
void change(int *a,int b) ?其中a為指針參數,*+任意參數或者變量均為指針參數或者變量 ?在調用該函數時需要在參數前+& 即: ?change(&a,&b);
變量前加*號表示加入指針。 在main函數中引用指針時是變量前加&號
int *a=&b; a是指針,把b的地址賦給a,a指向b
&表示取地址符
指針變量不賦初值會出錯,temp
查看全部 -
因為cpu的地址總線是32位,也就是尋址空間是32位,如果把內存地址比作一戶人家的門牌號,那么32位的尋址空間可以給2^32戶人家分配門牌號,而計算機中一個內存單位為1個字節,故而32位的操作系統只能使用2^32=(2^10)* (2^10)* (2^10)*( 2^2)=4G字節的內存,這樣說應該很清晰了
查看全部 -
void change(int *a,int b) ?其中a為指針參數,*+任意參數或者變量均為指針參數或者變量 ?在調用該函數時需要在參數前+& 即: ?change(&a,&b);
變量前加*號表示加入指針。 在main函數中引用指針時是變量前加&號
int *a=&b; a是指針,把b的地址賦給a,a指向b
&取地址符
指針變量不賦初值會出錯,temp
查看全部 -
gdb 斷點調試,單點調試
gcc -g? 文件名.out -o? ?文件名 .out 使用gdb編譯
gbd ./文件名.out? 執行
(gdb) l? 或list? 顯示源代碼
l:(list)列出源碼
回車繼續執行剛剛的命令
start開始執行
break n ---> 截取第n行斷點
print或p a 打印輸出a
n 跳到下一行
s 進入函數
bt 查看函數堆棧
f 切換
f 1 跳轉到函數1
q 退出調試
查看全部 -
1?指針?數組?字符串
2?堆內存?棧內存
3?GDB? 調試工具
查看全部 -
自由可分配內存
查看全部 -
用戶內存隔離開的好處
查看全部 -
一個內存的最小存儲單位1個字節
查看全部
舉報