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