-
棧內(nèi)存中,gcc編譯會作內(nèi)存優(yōu)化:1)使同一數(shù)據(jù)結(jié)構(gòu)的變量在一起;2)先定義的變量內(nèi)存地址會小于后定義的;3) 只有堆內(nèi)存和棧內(nèi)存可以寫入數(shù)據(jù),代碼段的內(nèi)存編譯以后無法修改。查看全部
-
int array[2];<br><br> int *p=array;<br><br> 而賦值操作也可以由p+=3; *p=101;變成簡單的p[3]=101;<br> array為常量指針,不可改變;p為變量指針,可以改變;<br><br> 數(shù)組本質(zhì)上是指針常量 所以,array能做的事情,p也能做到,但反之則不行;<br><br> PS:指針取值有兩種方式,一種是*p,另一種是p[i]查看全部
-
如果指針p已指向數(shù)組中的一個元素,則p+1(p++)指向同一數(shù)組中的下一個元素,而不是將p的值簡單的加1。 p += 3 表示將指針向下移動3個元素。<br>查看全部
-
gdb命令 x/10d 起始地址 從起始位置向后取10個值(10),以10進制輸出(d)查看全部
-
靜態(tài)變量 static關(guān)鍵字。函數(shù)調(diào)用結(jié)束后,靜態(tài)變量的值不消失。對一個C文件里的全局變量和函數(shù)加入static的申明 可以防止被其他C文件誤調(diào)用,即限定作用域只是當(dāng)前文件,其他文件中即使有同名變量和函數(shù)也不影響。查看全部
-
1.GCC會對內(nèi)存變量分配進行優(yōu)化:同一種變量類型會放到一塊兒!<br><br><br> 2.靜態(tài)變量、常量、全局變量存于內(nèi)存的數(shù)據(jù)段(數(shù)據(jù)段位置高于代碼段)。<br><br> 3.64位計算機中:地址都是用64bit表示的,所以指針(存儲地址)占64bit,即8字節(jié)。<br><br> 注意圖中:&pa -> &pb的確是增加了8個字節(jié)(16進制中滿16進1);<br> 4.棧分配內(nèi)存是由高位到地位 代碼段的內(nèi)存分配是由低到高查看全部
-
代碼段在低地址段<br> 桟記錄你執(zhí)行的代碼<br> 變量就是和名字一樣,只是一個代號,其本質(zhì)就是內(nèi)存!存在桟里<br> <br> 記錄在棧內(nèi)存中<br> 調(diào)用函數(shù)和其運行到第幾行<br> 有哪些變量,變量的值<br> <br> 棧從上往下,從大的地址往小的放入<br> <br> p &a 就可以知道a的地址在哪里<br> <br> 指針保存的是內(nèi)存地址<br>本質(zhì)就是地址 如圖<br> *p = &a<br> &a是地址,p是記錄a的地址,p是另一個柜子查看全部
-
高位內(nèi)存空間分配給操作系統(tǒng)內(nèi)核使用,低位內(nèi)存空間分配給用戶程序使用。 用戶程序的內(nèi)存空間從低到高又劃分為:代碼段、數(shù)據(jù)段、堆、自由可分配內(nèi)存和棧。 我們編寫的函數(shù)在編譯后存到磁盤,運行程序時,就把源代碼編譯后的二進制數(shù)據(jù)加載到內(nèi)存空間中的代碼段中。聲明的全局變量或常量放置在數(shù)據(jù)段。每次調(diào)用新的函數(shù),就將新的函數(shù)壓入棧區(qū)。查看全部
-
若某一個地址不足64位,只是表示殘缺的尾數(shù)都是前面的0,比如:5685125即0000000005685125 1.注意地址和內(nèi)存空間的對應(yīng)。 2.64bit操作系統(tǒng)中0~0*7fffffffffff(11個f)是留給用戶/程序員使用的,剩余的0*7fffffffffff~0*ffffffffffffffff是供操作系統(tǒng)調(diào)用的)。 3.用戶的內(nèi)存隔離:將應(yīng)用程序和操作系統(tǒng)的內(nèi)存隔離開是有好處的,使操作系統(tǒng)更加安全! 4.32bit的計算機最多使用4G的內(nèi)存!查看全部
-
盡管用戶的內(nèi)存用完了,操作系統(tǒng)的內(nèi)存還在,就可以使用操作系統(tǒng)關(guān)閉用戶程序的內(nèi)存使用查看全部
-
&a a 代表的內(nèi)存地址 *a 代表的是這個內(nèi)存地址所賦的值 *a = *b 表示b地址所賦的值替換a地址所賦的值查看全部
-
使用gdb調(diào)試步驟: 1、使用帶-g選項的gcc命令編譯源文件:gcc -g main.c -o main.out 2、使用gdb工具調(diào)試:gdb ./main2.out 3、調(diào)試過程中:(gdb): l 列出當(dāng)前項目源代碼(list)→再按l或直接按回車:繼續(xù)執(zhí)行上一命令 break 12 將斷點打在第12行 start 單步調(diào)試 p a 顯示當(dāng)前a的值(print)(當(dāng)前行的命令未完全執(zhí)行) n 進入下一行(next) s 進入當(dāng)前函數(shù)內(nèi)部(step) bt 查看函數(shù)堆棧(在上方的函數(shù)先執(zhí)行) f 1 切換到1號棧 q 退出調(diào)試查看全部
-
指針變量 定義int *a 地址符號&a查看全部
-
char *p="hello world"; 這段字符串是存儲在內(nèi)存 代碼段中的,不允許被修改查看全部
-
內(nèi)存分配查看全部
舉報
0/150
提交
取消