-
gcc -g main.c -o main.out生成調(diào)試版本<br> gdb ./main.out 進(jìn)行調(diào)試<br> gdb下list 或者 l 列出源代碼 回車?yán)^續(xù)剛才的指令 或者 `繼續(xù)輸出 l 將源代碼顯示完整<br> start 開始調(diào)試 從main函數(shù)下面第一句開始<br> q 退出 print(p) a 查看a變量的值<br> n 進(jìn)入下一行,還未執(zhí)行<br> step(s) 進(jìn)入函數(shù)中 bt 查看函數(shù)堆棧 f 1 跳到1這個(gè)棧查看全部
-
1.內(nèi)存空間中棧和堆的空間是程序員可以更改的,但是代碼段是不允許程序員更改的(代碼段:程序編譯后生成的機(jī)器碼,雙擊運(yùn)行后會(huì)直接加載運(yùn)行)查看全部
-
1.指針的偏移要比直接用CPU控制地址總線還要高效!<br> 2.int *p;<br> //p[4]的意義是:指針p往下移動(dòng)4格(中括號(hào):偏移計(jì)算)!與數(shù)組有不同的意義!<br> p[4]=5;//指針p往下移動(dòng)4個(gè)單位空間后的指向空間賦值5;<br> 3.int array[3] 聲明的數(shù)組中array既是數(shù)組名,又是數(shù)組的首地址;所以<br> int *p;<br> p=array;<br> //p[n]和array[n]有相同的數(shù)值,在功能上可以相互轉(zhuǎn)化。<br> 所以:可以說(shuō),數(shù)組能做的指針都可以做到;指針能做到的數(shù)組不一定能做到!<br> 原因:array作為一個(gè)數(shù)組,目的是存儲(chǔ),其指向的地址沒必要改變,是常量;<br> 而p作為指針,目的是操作,是變量!<br> 4.char str[10];<br> scanf("%s",str);<br> 和scanf("%s",&str);有相同的功能,也就是說(shuō):&是多余的<br> 因?yàn)閟tr是字符型數(shù)組名,也就是字符數(shù)組的首地址(本身就是地址當(dāng)然不用取址符)查看全部
-
32位系統(tǒng)中指針占4個(gè)字節(jié); 64位系統(tǒng)中指針占8個(gè)字節(jié); 指針的本質(zhì)就是一個(gè)地址查看全部
-
計(jì)算機(jī)內(nèi)存模型: 1、系統(tǒng)內(nèi)核; 2、棧內(nèi)存; 3、自由可分配內(nèi)存; 4、堆內(nèi)存; 5、數(shù)據(jù)段; 6、代碼段;查看全部
-
32位操作系統(tǒng),地址總線為2的32次方(4G),所以支持的最大內(nèi)存為4G查看全部
-
變量的本質(zhì)是內(nèi)存 指針本質(zhì)就是存放地址的內(nèi)存查看全部
-
字符串指針(char *str)指向的字符串存放在代碼段,而字符數(shù)組(char str[])的字符串存放在棧中。 代碼段不能被修改,只有在棧內(nèi)存或者堆內(nèi)存的數(shù)據(jù)才能修改。查看全部
-
內(nèi)存分配查看全部
-
1. int quadraate(int a);是一個(gè)函數(shù) int (*pquadrate)(int a)=&quadrate;則是指向這個(gè)函數(shù)的指針! int s=(*pquadrate)(a)可以調(diào)用函數(shù)! 2.一個(gè)指針變量*q 不加*號(hào):P q 取出自己地址中存儲(chǔ)的值(一個(gè)地址)。 加*號(hào):P *q 取出指向地址中存儲(chǔ)的值。查看全部
-
1.GCC會(huì)對(duì)內(nèi)存變量分配進(jìn)行優(yōu)化:同一種變量類型會(huì)放到一塊兒!<br> 2.靜態(tài)變量、常量、全局變量存于內(nèi)存的數(shù)據(jù)段(數(shù)據(jù)段位置高于代碼段)。 3.64位計(jì)算機(jī)中:地址都是用64bit表示的,所以指針(存儲(chǔ)地址)占64bit,即8字節(jié)。 注意圖中:&pa -> &pb的確是增加了8個(gè)字節(jié)(16進(jìn)制中滿16進(jìn)1); 同理:從de18 -> de20也是增加了8個(gè)字節(jié)。 4.棧區(qū)域(最接近系統(tǒng)控制的內(nèi)存空間)保存的是函數(shù)的運(yùn)行狀態(tài):函數(shù)執(zhí)行到哪一個(gè)命令?每一個(gè)變量保存的什么值?等等 5.在代碼段和數(shù)據(jù)段(區(qū)),內(nèi)存是從低地址向高地址轉(zhuǎn)移的,即:先聲明的函數(shù)地址小,后聲明的函數(shù)地址大;而在棧中,剛好相反。查看全部
-
1.區(qū)分<br> P &a;<br> P pa;<br> P &pa; 2.在標(biāo)準(zhǔn)的C語(yǔ)言中,不允許直接對(duì)內(nèi)存地址進(jìn)行操作,只能是對(duì)操作系統(tǒng)已經(jīng)分配給的內(nèi)存空間進(jìn)行操作。(防止用戶自己操作內(nèi)存地址時(shí)侵吞系統(tǒng)內(nèi)存或者其他程序的內(nèi)存)查看全部
-
若某一個(gè)地址不足64位,只是表示殘缺的尾數(shù)都是前面的0,比如:5685125即0000000005685125 1.注意地址和內(nèi)存空間的對(duì)應(yīng)。 2.64bit操作系統(tǒng)中0~0*7fffffffffff(11個(gè)f)是留給用戶/程序員使用的,剩余的0*7fffffffffff~0*ffffffffffffffff是供操作系統(tǒng)調(diào)用的)。 3.用戶的內(nèi)存隔離:將應(yīng)用程序和操作系統(tǒng)的內(nèi)存隔離開是有好處的,使操作系統(tǒng)更加安全! 4.32bit的計(jì)算機(jī)最多使用4G的內(nèi)存!查看全部
-
采集自:Ephone_Chan(略有改動(dòng)) ,轉(zhuǎn)載請(qǐng)注明 1.編譯命令:gcc -g main.c -o main.out; 2.調(diào)試命令:gdb ./main.out; 3.調(diào)試器:(gdb)list:列出源代碼;(gdb)break line-number:在指定行數(shù)打斷點(diǎn);(gdb)start:開啟單步調(diào)試; (gdb)p a:打印a變量在內(nèi)存中的情況;(gdb)n:執(zhí)行到下一句;(gdb)s:進(jìn)入函數(shù)內(nèi)部;(gdb)bt:查看函數(shù)堆棧; (gdb)f 1:切換到編號(hào)為1的函數(shù)中;(gdb)q:退出調(diào)試; 4.回車鍵:繼續(xù)執(zhí)行上一條指令。 5.gdb命令 (1)x/10d 起始地址 從起始位置向后取10個(gè)值(10),以10進(jìn)制輸出(d) 例如: (gdb) x/6d 0×7fffffffde1c (2)*:到某個(gè)地址找個(gè)東西查看全部
-
字符串與指針查看全部
舉報(bào)
0/150
提交
取消