是的,棧基址的卻可以通過(guò)/STACK開(kāi)關(guān)指定.我說(shuō)的方法只是用于一些只有一個(gè)線程簡(jiǎn)單項(xiàng)目的判斷,如果要對(duì)多線程,就得用你這個(gè)方法了,其實(shí)簡(jiǎn)單的判斷單線程程序,我這個(gè)方發(fā)也是可行的,因?yàn)槌绦蛑腥绻亲约憾x的變量只能在三個(gè)地方,全局區(qū),棧區(qū),堆,當(dāng)然手工添加PE節(jié)區(qū)的情況除外,比如創(chuàng)建dll時(shí)加一個(gè)共享段,然后把變量定義在這個(gè)共享段中,全局區(qū)是存放靜態(tài)數(shù)據(jù)和全局變量,所以如果我們要測(cè)試的不是靜態(tài)變量或者全局變量,那么它不在堆區(qū)就在棧.至于靜態(tài)存儲(chǔ)區(qū)是個(gè)廣義的說(shuō)法,可以是全局區(qū),棧,文字常量區(qū),代碼區(qū).
對(duì)了,為了驗(yàn)證new 時(shí)c/c++ CLR會(huì)創(chuàng)建自己的堆我做了測(cè)試,發(fā)現(xiàn)一個(gè)有趣的事,就是在程序中,一開(kāi)始,就有4個(gè)堆,我把所有標(biāo)準(zhǔn)C++文件全部移出,只留一個(gè)Windows.h, 并連接release版c/c++ CLR,結(jié)果還是4,我把windows.h移出結(jié)果也是四,即使我在我的Cpp中沒(méi)有new,結(jié)果還是4,發(fā)現(xiàn)要想驗(yàn)證這個(gè)還真是不好辦,因?yàn)轭^文件中庫(kù)函數(shù)也可以new,也可以創(chuàng)建堆等等有太多不可控制因素,我能想到的就是看源碼了,但我還真沒(méi)找到源碼,不知你有沒(méi)有什么方法.
回復(fù) 更多評(píng)論