Это 2,147,483,647. Самый легкий способ запомнить его через татуировку.
Я думаю, что это очень интересный проект, который вы могли бы изучить много от. Вот небольшой материал для чтения по теме управления памятью. В нем рассматриваются некоторые основы управления памятью, приводится простая реализация malloc, а затем затрагивается пара более сложных тем.
Кроме того, поскольку вы упомянули, что хотите создать диспетчер памяти, который полезен для отладки, вы можете прочитать этот документ от разработчиков Memcheck / Valgrind (замечательный отладчик памяти для Linux). В нем подробно описано, как они отслеживают все метаданные (независимо от того, определен ли конкретный байт, инициализирован и т.д.) в memchck. Это немного подробно, но это Хорошее чтение о том, как создать масштабируемую и эффективную программу проверки динамической памяти.
Дэйв Хэнсон Интерфейсы и реализации C представляет сначала стандартный диспетчер памяти, а затем диспетчер памяти с несколькими функциями отладки. Это было бы отличной отправной точкой для изучения и расширения.
Конечно, если вы действительно хотите диагностировать проблемы с памятью в работающей программе C или C ++,
Я видел, как в некоторых примерах используется макрос препроцессора C для malloc
. Это умная идея. Я уверен, что вы могли бы написать что-то подобное.
Вот, похоже, хорошая отправная точка.
Есть отличный менеджер памяти с открытым исходным кодом, написанный на Delphi: fastMM4 . Было бы полезно взглянуть на это. Он поддерживает многие функции, которые вы хотите реализовать, и поэтому может стать отличным примером.
Как сказал @Spence, это уже было сделано много раз. Но ради обучения это довольно интересно.
Могу я предложить вам взглянуть на ld --wrap Здесь , поскольку это полезно
Вы можете реализовать большую часть этого в терминах malloc и free - на самом деле реализовано множество менеджеров памяти C ++, даже если они не обязательны.
Можно начать с простой реализацией, которая ведет журнал всех выделений и освобождений, но перенаправляет регулярные выделения / освобождения памяти на malloc и free. Очевидно, что простая реализация также не должна использовать new / delete ...
Итак, для начала вы можете
Думаю, вы могли бы начать с реализации интеллектуального указателя, которая использует базовый подсчет ссылок в фоновом режиме. Это основы управления памятью, которые вам помогут. Оттуда вы можете использовать свои реализации для создания более продвинутого диспетчера памяти.
«Электрический забор» - это основная отправная точка, которая может оказаться полезной. По сути, он имеет собственные реализации malloc и free, которые обеспечивают отладку.
Однако, AFAIK, он не интегрируется в операторы new / delete C ++, хотя было бы не слишком сложно предоставить настраиваемый глобальный новый / удалить реализации, которые относятся к процедурам электрического ограждения.
Какая у вас платформа? Просто подумайте, могут ли вам помочь валгринд или линт, прежде чем вы попытаетесь заменить кухонную раковину?