Как я могу определить, выделяет ли CString память в куче или стеке? - PullRequest
1 голос
/ 25 мая 2010

Как узнать, выделяет ли MFC CString память в куче или стеке? Я компилирую для платформы Windows Mobile / Windows CE.

Я работаю над проектом, разработанным кем-то другим, и я стал свидетелем переполнения стека при определенных обстоятельствах. Я пытаюсь выяснить, не вызывают ли переполнения стека пользовательские классы наборов записей SQLite (со многими переменными-членами CString), размещенные в стеке.

1 Ответ

1 голос
/ 25 мая 2010

Если вы помещаете объект в стек, который содержит «много» строк CSt, у вас будут некоторые данные в стеке, а некоторые - в куче.

Данные управления CString - это то, чем является сам объект. sizeof (CString) скажет вам, насколько он велик. Он включает в себя информацию о его размере и указатель на собственно символьный массив. Сам массив символов берется из кучи. CString :: GetLength () или любой другой вызов скажет вам, сколько места занято в куче.

sizeof (YourCustomRecordset) сообщит вам, сколько стекового пространства занимает ваш объект, когда вы помещаете его в стек.

...