如何判断CString是在堆还是堆栈上分配内存?

时间:2010-05-25 17:48:15

标签: c++ mfc stack heap cstring

如何判断MFC CString是在堆还是堆栈上分配内存?我正在为Windows Mobile / Windows CE平台编译。

我正在开发一个由其他人开发的项目,我在某些情况下目睹了堆栈溢出。我试图弄清楚堆栈上分配的自定义SQLite记录集类(包含许多CString成员变量)是否导致堆栈溢出。

1 个答案:

答案 0 :(得分:1)

如果你将一个对象放在包含“很多”CStrings的堆栈上,你将在堆栈上有一些数据,而堆栈上有一些数据。

CString“管理”数据是对象本身的内容。 sizeof(CString)会告诉你它有多大。它包含有关其大小和指向实际字符数组的指针的信息。字符数组本身是从堆中获取的。 CString :: GetLength()或者调用的任何内容都会告诉你在堆上占用了多少空间。

sizeof(YourCustomRecordset)会告诉您将对象放入堆栈时占用的堆栈空间。