2010-05-25 171 views
1

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

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

回答

1

如果您将一个对象放到包含“多”CString的堆栈上,那么您将在堆栈中有一些数据,并在堆上有一些数据。

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

sizeof(YourCustomRecordset)会告诉你当你将它放到堆栈上时,对象占用了多少堆栈空间。