2010-05-25 111 views
1

如何判斷MFC CString是否在堆或棧上分配內存?我正在編譯Windows Mobile/Windows CE平臺。如何判斷CString是否在堆或棧上分配內存?

我正在開發一個由別人開發的項目,在某些情況下我目睹了堆棧溢出。我試圖找出堆棧上分配的自定義SQLite記錄集類(包含許多CString成員變量)是否導致堆棧溢出。

回答

1

如果您將一個對象放到包含「多」CString的堆棧上,那麼您將在堆棧中有一些數據,並在堆上有一些數據。

CString「管理」數據就是對象本身。 sizeof(CString)會告訴你它有多大。它包含有關其大小和實際字符數組指針的信息。字符數組本身是從堆中取出的。 CString :: GetLength()或任何調用將告訴你在堆上佔用了多少空間。

sizeof(YourCustomRecordset)會告訴你當你將它放到堆棧上時,對象佔用了多少堆棧空間。