使用簡單遞迴驗證VC6環境的棧大小

2021-06-07 18:13:39 字數 848 閱讀 3864

以下是在vc6環境中試驗,其他vs2008,vs2010一樣的方式,結果可能不一樣。

vc6的棧空間被預設設定為1m(1024*1024 = 0x100000)位元組,可以通過 ① msdn的索引頁面中找/f編譯器選項;② 使用dumpbin /headers test.exe列出;

下面是乙個累加的遞迴程式,分別在預設vc6的debug設定、release設定、將堆疊設定為2m(0x200000)位元組後,一直執行到最後的次數(最後一次棧未溢位):

#include //

// 使用遞迴實現【累計和】,如「1+2+....+99+100」

//int add(int m)

else }

//// 使用遞迴實現【階乘】,如「1*2*....*99*100」

//int factor(int m)

else }

void main()

}

vc6下設定棧空間的方式,如下圖被設定為2m位元組:

在預設debug模式下,i的最後一次為11773,依此推斷每次呼叫函式的開銷為:(1024*1024)/11773≈90位元組左右;

在預設release模式下,i的最後一次為86346,依此推斷每次呼叫函式的開銷:(1024*1024)/86346≈12位元組左右;

在設定2m棧空間release模式下,i的最後一次為173728,依此推斷每次呼叫函式的開銷:(2*1024*1024)/173728≈12位元組左右;

上面具體的每次呼叫函式開銷可以單次按f11跟蹤esp統計精確資料。

VC6環境下RichEdit2 0的乙個亂碼問題

最近在公司不忙,用閒暇時間,寫了個聊天室。公司的開發環境是vc6,原本是用的是edit control,由於希望支援表情功能,改為使用richedit控制項。可是發現乙個問題,雖然我使用的是unicode編譯的,顯示中文的時候有些字還是出現亂碼。網上查了一下,有說richedit2.0對unicod...

CGridCtrl 在vc6下的使用

最近在做乙個小型的進銷存。因為後期要顯示相關的報表資訊。在經過一系列的搜尋 終於選擇使用cgridctrl。為什麼選擇這個呢 乙個是功能的強大。再就是比較靈活。最重要的我選擇這個的原因是可以合併單元格。現在來說說如何使用cgridctrl 我是建立的dialog的程式。我先建立了乙個全域性變數 cg...

ipv6 環境下完美使用scp

星期日本該是乙個可以躺在床上休息的日子,然而一通 就把我叫了起來。發現之前修改問題的時候引入了乙個問題,ipv6環境下,scp命令失敗 network unreachable。通常情況下,在ipv4的環境下,我們使用scp的時候,都是按照如下的格式來寫的 scp file root 192.168....