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

标签 c++ mfc heap-memory c-strings stack-memory

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

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

最佳答案

如果您将一个对象放入包含“许多”CString 的堆栈中,您将在堆栈中拥有一些数据,在堆中拥有一些数据。

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

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

关于c++ - 我如何判断 CString 是在堆上还是在堆栈上分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907091/

相关文章:

c++ - 链接目标文件和静态库时出现多重定义错误

c++ - 类中的unique_ptr如何使用它们

c++ - 当我调试方法 AttachThreadInput() 时,Visual Studio 2010 挂起

c++ - 处理孙子控件的 WM_NOTIFY

c - 在C中确定变量栈还是堆?

c++ - 制作一个编译器始终放置在 PE 文件中硬编码偏移量的结构

c++ - 字符串反向功能不适用于奇数长度的字符串

c++ - 在 NT4 上 boost MFC 应用程序

embedded - 如何更改 FreeRTOS 中任务的最大可用堆大小?

c++ - 我是否正确删除了我的结构?