2010-05-25 18 views
1

Comment puis-je savoir si le CString MFC alloue de la mémoire sur le tas ou la pile? Je compile pour la plate-forme Windows Mobile/Windows CE.Comment puis-je savoir si CString alloue de la mémoire sur le tas ou la pile?

Je travaille sur un projet développé par quelqu'un d'autre et j'ai été témoin de débordements de pile dans certaines circonstances. J'essaie de déterminer si les classes d'ensemble d'enregistrements SQLite personnalisées (avec de nombreuses variables de membre CString) allouées sur la pile causent des débordements de pile.

Répondre

1

Si vous placez un objet sur la pile qui contient "plusieurs" CStrings, vous aurez des données sur la pile et d'autres sur le tas.

La CString "gestion" des données est ce que l'objet lui-même est. sizeof (CString) vous dira quelle taille il est. Il inclut des informations sur sa taille et le pointeur vers le tableau de caractères en réalité. Le tableau de caractères lui-même est pris dans le tas. CString :: GetLength() ou quel que soit l'appel vous dira combien d'espace est pris sur le tas. Sizeof (YourCustomRecordset) vous dira combien d'espace de pile est occupé par votre objet lorsque vous le placez sur la pile.