إدارة ذاكرة و يصحح كومة ذاكرة مؤقتة
ينطبق هذا الموضوع على:
النسخة |
Visual Basic |
C# |
#F |
C++ |
مطور الويب |
---|---|---|---|---|---|
Express |
أصلي فقط |
||||
pro ، Premium و Ultimate |
أصلي فقط |
الثاني من الأكثر شيوعاً و intractable المشاكل التي تواجهها المبرمجين يتم الكتابة فوق إنهاء تسرب احتياطي والذاكرة المخصصة (فشل إلى تحرير عمليات التخصيص بعد لم تعد مفيدة). يوفر كومة ذاكرة المؤقتة للتصحيح فعال إلى ols إلى حل المشاكل المتعلقة بتخصيص ذاكرة من هذا النوع.
يصحح إصدارات وظائف كومة ذاكرة مؤقتة
يصحح استدعاء إصدارات الوظائف كومة ذاكرة مؤقتة للإصدارات الأساسية أو القياسية المستخدمة في الإنشاء الإصدار. عندما تطلب حظر ذاكرة، يصحح بتخصيص من الكومة الأساسية حظر بقعة صغيرة قليلاً من الذاكرة عن طلب إدارة كومة ذاكرة مؤقتة وتقوم بإرجاع مؤشر إلى الجزء الخاص بك لهذه الحظر. على سبيل المثال، افترض أن تطبيق الخاص بك يحتوي على يتصل: malloc( 10 ). في بنية إصدار، mallocهو الاتصال الأساس إجراء تخصيص كومة ذاكرة مؤقتة لطلب تخصيص من 10 وحدات البايت. في يصحح بنية، على الرغم من ذلك، mallocهو يتصل _malloc_dbg، الذي قد ثم يتصل إجراء تخصيص كومة ذاكرة مؤقتة لقاعدة طلب تخصيص 10 وحدات البايت بالإضافة إلى 36 وحدات وحدات البايت تقريبا من ذاكرة إضافى. الجميع كتل ذاكرة الناتج في كومة ذاكرة المؤقتة للتصحيح المتصلة في قائمة واحدة مرتبطة، مرتبة طبقاً إلى متى تم تخصيصها.
ذاكرة إضافى تخصيصها بإجراءات كومة Debug هو المستخدم لمعلومات مسك الدفاتر، للمؤشرات أن كتل الذاكرة تصحيح الارتباط معا، والمخازن المؤقتة صغيرة تشغيل كلا جانبي من بيانات لجذب يتجاوز المنطقة المخصصة.
حاليا، بنية عنوان حظر يستخدم في تخزين المعلومات الكومة المؤقتة تصحيح مسك الدفاتر هو تعريف كما يلي في ملف العنوان DBGINT.H:
typedef struct _CrtMemBlockHeader
{
// Pointer to the block allocated just before this one:
struct _CrtMemBlockHeader *pBlockHeaderNext;
// Pointer to the block allocated just after this one:
struct _CrtMemBlockHeader *pBlockHeaderPrev;
char *szFileName; // File name
int nLine; // Line number
size_t nDataSize; // Size of user block
int nBlockUse; // Type of block
long lRequest; // Allocation number
// Buffer just before (lower than) the user's memory:
unsigned char gap[nNoMansLandSize];
} _CrtMemBlockHeader;
/* In an actual memory block in the debug heap,
* this structure is followed by:
* unsigned char data[nDataSize];
* unsigned char anotherGap[nNoMansLandSize];
*/
NoMansLand المخازن المؤقتة تشغيل كلا جانبي مساحة بيانات مستخدم من الحظر حاليا 4 وحدات البايت بالحجم، ويتم تعبئة بقيمة الوحدات البايت معروفة مستخدمة مع روتينيات كومة Debug إلى التحقق من أن حدود حظر ذاكرة مستخدم قد لا تمت الكتابة فوقه. يصحح كومة ذاكرة المؤقتة أيضا بتعبئة كتل ذاكرة الجديدة بقيمة معروفة. إذا قمت باختيار إلى الكتل الاحتفاظ بتحريرها في كومة ذاكرة مؤقتة الخاص بربط القائمة كما هو موضح أدناه، هذه تحرير أيضا تتم تعبئة كتل ذات قيمة معروفة. حاليا، قيم البايتات الفعلية المستخدمة كالتالي:
NoMansLand (0xFD)
يتم حاليا ملء المخازن المؤقتة "NoMansLand" تشغيل كلا جانبي ذاكرة المستخدمة من قبل تطبيق ما مع 0xFD.كتل freed (0xDD)
ربط كتل freed الاحتفاظ بها غير مستخدمة في كومة ذاكرة مؤقتة للتصحيح lهوt عند _CRTDBG_DELAY_FREE_MEM_DFإشارة هو حاليا يتم ملء مجموعة 0xDD.جديد الكائنات (0xCD)
يتم تعبئة الكائنات الجديدة ب 0xCD عند بقيت.