棧和代碼段、數(shù)據(jù)段不一樣,棧是越靠近棧頂,其內(nèi)存地址越小,而代碼段和數(shù)據(jù)段則是,越往后,其內(nèi)存地址越大
2016-10-01
版本:gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3)
安裝gdb工具:apt-get install gdb
練習(xí):設(shè)函數(shù)void change(int,int)將交換兩形參數(shù)值,如有兩整型變量int a=10;int b=15,則執(zhí)行change(a,b);之后,a,b值分別為( ?。?br /> *******
answer:10 15
解析:只是傳值,只是change的局部變量,是實(shí)參的備份。
解決:加個(gè)指針,取地址符,實(shí)現(xiàn)交換功能。
安裝gdb工具:apt-get install gdb
練習(xí):設(shè)函數(shù)void change(int,int)將交換兩形參數(shù)值,如有兩整型變量int a=10;int b=15,則執(zhí)行change(a,b);之后,a,b值分別為( ?。?br /> *******
answer:10 15
解析:只是傳值,只是change的局部變量,是實(shí)參的備份。
解決:加個(gè)指針,取地址符,實(shí)現(xiàn)交換功能。
2016-09-19
64位系統(tǒng)下,指針占8個(gè)字節(jié),32位 4個(gè)字節(jié)。
棧、先聲明的地址大,后聲明的地址小,與代碼段數(shù)據(jù)段相反。
編譯器優(yōu)化代碼,把聲明時(shí)不在一起的同一類型變量,放到一起(某種程度上修改了源碼)
如 聲明 int a ; float b ; int c; 編譯后變量a的地址和c的地址是連在一起的.
棧、先聲明的地址大,后聲明的地址小,與代碼段數(shù)據(jù)段相反。
編譯器優(yōu)化代碼,把聲明時(shí)不在一起的同一類型變量,放到一起(某種程度上修改了源碼)
如 聲明 int a ; float b ; int c; 編譯后變量a的地址和c的地址是連在一起的.
2016-09-17