麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 應(yīng)用 > 軟件技巧 > 正文

揭開匯編死循環(huán)的神秘面紗

2024-07-16 17:44:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
首先請(qǐng)大家看這么一個(gè)簡(jiǎn)單的小程序:

#include <stdio.h>

void main()
{
int i, b[10];
for ( i = 0; i <= 10; i++ )
{
b[i] = 0;
}
}


請(qǐng)問這個(gè)程序是否有錯(cuò)?A.正常 B.越界 C.死循環(huán)

正確答案是C,相信選A或選B的朋友一定會(huì)很納悶。事實(shí)上我也是如此,單單從程序的表面上看,按定義這應(yīng)該是個(gè)越界,因?yàn)楫?dāng)循環(huán)進(jìn)行到i == 10的時(shí)候,程序?qū)⒃噲D將b[10]賦值為0,而C語(yǔ)言中,b[10]的聲明就是指定b[0]~b[9]可用。

然而程序的結(jié)果你看到了,這是個(gè)死循環(huán)無(wú)疑。

也好,那么讓匯編來(lái)告訴你——以及我——這一切的真相吧,在這之前請(qǐng)你把i和b[10]的定義改成:

int i = 0, b[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };


然后,將這個(gè)程序反匯編,可以得到:
 
讓我來(lái)解釋一下這段匯編代碼的含義吧。在系統(tǒng)的實(shí)現(xiàn)中,i和數(shù)組b[10]是分配在棧上的變量,在內(nèi)存中的分布如下圖:
 
現(xiàn)在你看到了,i所占據(jù)的正是b[10]的位置,而b[10] = 0;這一句會(huì)被這樣運(yùn)行:

*(&b[0] + 10) = 0;


所以這一句的結(jié)果,就是把0賦值給i。這樣一來(lái)在第11次循環(huán)的時(shí)候,i將會(huì)被重新置為0,那么循環(huán)結(jié)束的條件也就永遠(yuǎn)不會(huì)滿足了,循環(huán)也就是個(gè)死循環(huán)了。

事實(shí)上單單討論C語(yǔ)言的內(nèi)部實(shí)現(xiàn)并沒有什么意義,而且這樣書寫的循環(huán)在程序設(shè)計(jì)中也絕對(duì)不能夠出現(xiàn)。所以我所想要討論的,就是如何讓匯編幫助我們解決表面上無(wú)法看清楚的東西,僅此而已。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品久久久久久久久久三级 | 亚洲欧美在线视频免费 | 国产精品久久久久久久久久久天堂 | 日本黄色大片免费 | 激情影院在线观看 | 国产精品伦视频看免费三 | 日韩av有码在线 | 久久九九热re6这里有精品 | 羞羞视频免费网站含羞草 | 康妮卡特欧美精品一区 | 国产精品爱久久久久久久 | 久久久三级免费电影 | 精品亚洲视频在线 | 国产青草视频在线观看 | 爱爱视频天天干 | 手机av免费电影 | 亚洲精品久久久久久久久久久 | 色婷婷一区二区三区 | 久久久av亚洲男天堂 | 久久精品视频国产 | 欧美亚洲国产一区 | 欧美性黄 | 欧美三级欧美成人高清www | 欧美日韩亚洲在线观看 | 99国产精成人午夜视频一区二区 | 黄色免费不卡视频 | 久久精品视频网站 | 日本成人午夜 | 蜜桃网站免费 | 成人福利视频 | 亚洲精品午夜国产va久久成人 | 久久精品视频69 | 国产剧情v888av | 久久99综合久久爱伊人 | 亚洲精品久久久久久下一站 | 亚洲午夜久久久精品一区二区三区 | 91网页| 国产日韩一区二区三区在线观看 | 欧美一级高潮片免费的 | 日本一区二区久久久 | 最新se94se在线欧美 |