我又有想法辣,<( ̄︶ ̄)>,今天的想法的目的是實現棧的使用量的檢測方法。
1、利用*.map檔案定位棧頂位址,並且得到棧的使用量大小;
2、定義乙個全域性變數,用於儲存棧區記憶體上電時候的預設值,這個預設值我定義為棧頂記憶體值;
3、在大迴圈裡面從棧頂位址開始,將棧記憶體裡面的值和第二步中的值進行比較,如果不相等,則認為該棧的記憶體被使用了,記下該位址值,用棧底位址和該位址相減,然後再和棧使用量大小相除,得到棧的使用量的大小比值;
4、第三步中,得到第一次的記憶體值被修改後,下一次的檢測將從該位址開始檢測,依次類推。即檢測過的位址只要有一次值被修改後,不會再檢測。所以,本設計不能得到實時的棧使用量的大小,只能得到程式執行過程中,棧的最大使用量的大小。
解釋第四步:為什麼在檢測中不能每一次從棧頂開始呢?這樣不就可以得到棧的實時使用量的大小嗎?因為棧在出棧時不會清棧(注意,這個是大前提,因編譯器而異),所以這次檢測的值有可能是上n次的被汙染的記憶體。
偽**如下:
#define stack_top 0x20000210 //棧頂位址,這個得自己去查,如果有變數定義,每次編譯都可能不一樣
#define stack_usage 0x0
0000500//棧的使用量,這個得自己去查,每次編譯都可能不一樣
uint8_t stack_value;//棧未被汙染時候的值
uint_8 stack_overflow=0;//棧溢位標誌
uint_8 main()
}uint16_t check_stack(void)
else
} }
} 寫於2023年11月9日 深圳
一種高效全零塊檢測方法
一種自適應低複雜度全零塊檢測演算法。主要是為了提高基於satd閾值的自適應檢測方法的檢測精度,節省rdo檢測時間。在傳統的satd檢測失敗後,提出了一種自適應搜尋時域低頻最大變換係數幅值的全零塊檢測方法。在變換量化之前提早地檢測出全零塊無疑是非常有必要的。現有的全零塊檢測技術大多數是使用sad或sa...
dockPanel一種使用方法
主窗體的設定 1 主窗體定義好選單 狀態後 2 引用 新增引用 瀏覽 weifenluo.winformsui.docking.dll 3 主窗體屬性 ismdicontainer true 4 工具箱 右鍵 選擇項 net元件 瀏覽 weifenluo.winformsui.docking.dll...
VC 記憶體洩露與檢測的一種方法
本文介紹,當vc 或者mfc程式,出現記憶體洩露時,如何快速定位的方法,這種方法有一定的侷限性,在注意事項中會給出的。當mfc程式出現記憶體洩露時,退出程式時的vs除錯輸出視窗,一般會有如下顯示 上面顯示了在程式的哪個檔案的哪行語句,發生了記憶體洩露,其中 表示 記憶體分配編號 normal blo...