Запишите своего собственного [закрытого] диспетчера памяти

Это 2,147,483,647. Самый легкий способ запомнить его через татуировку.

21
задан Tobias Langner 28 July 2009 в 14:28
поделиться

9 ответов

Я думаю, что это очень интересный проект, который вы могли бы изучить много от. Вот небольшой материал для чтения по теме управления памятью. В нем рассматриваются некоторые основы управления памятью, приводится простая реализация malloc, а затем затрагивается пара более сложных тем.

Внутреннее управление памятью

Кроме того, поскольку вы упомянули, что хотите создать диспетчер памяти, который полезен для отладки, вы можете прочитать этот документ от разработчиков Memcheck / Valgrind (замечательный отладчик памяти для Linux). В нем подробно описано, как они отслеживают все метаданные (независимо от того, определен ли конкретный байт, инициализирован и т.д.) в memchck. Это немного подробно, но это Хорошее чтение о том, как создать масштабируемую и эффективную программу проверки динамической памяти.

Как затенять каждый байт памяти, используемый программой

32
ответ дан 29 November 2019 в 20:48
поделиться

Дэйв Хэнсон Интерфейсы и реализации C представляет сначала стандартный диспетчер памяти, а затем диспетчер памяти с несколькими функциями отладки. Это было бы отличной отправной точкой для изучения и расширения.

Конечно, если вы действительно хотите диагностировать проблемы с памятью в работающей программе C или C ++,

4
ответ дан 29 November 2019 в 20:48
поделиться

Я видел, как в некоторых примерах используется макрос препроцессора C для malloc . Это умная идея. Я уверен, что вы могли бы написать что-то подобное.

Вот, похоже, хорошая отправная точка.

http://stevehanov.ca/blog/index.php?id=10

2
ответ дан 29 November 2019 в 20:48
поделиться

Есть отличный менеджер памяти с открытым исходным кодом, написанный на Delphi: fastMM4 . Было бы полезно взглянуть на это. Он поддерживает многие функции, которые вы хотите реализовать, и поэтому может стать отличным примером.

1
ответ дан 29 November 2019 в 20:48
поделиться

Как сказал @Spence, это уже было сделано много раз. Но ради обучения это довольно интересно.

Могу я предложить вам взглянуть на ld --wrap Здесь , поскольку это полезно

1
ответ дан 29 November 2019 в 20:48
поделиться

Вы можете реализовать большую часть этого в терминах malloc и free - на самом деле реализовано множество менеджеров памяти C ++, даже если они не обязательны.

Можно начать с простой реализацией, которая ведет журнал всех выделений и освобождений, но перенаправляет регулярные выделения / освобождения памяти на malloc и free. Очевидно, что простая реализация также не должна использовать new / delete ...

Итак, для начала вы можете

  • придумать структуру данных, которая регистрирует выделение и освобождение.
  • Реализуйте это в основном "в стиле C", хотя вы можете использовать размещение new для обеспечения вызова конструкторов
  • . Реализуйте глобальные новые и удаляемые как оболочки, которые сначала регистрируют доступ в указанной выше структуре данных, а затем перенаправляют вызов на malloc или free
0
ответ дан 29 November 2019 в 20:48
поделиться

Думаю, вы могли бы начать с реализации интеллектуального указателя, которая использует базовый подсчет ссылок в фоновом режиме. Это основы управления памятью, которые вам помогут. Оттуда вы можете использовать свои реализации для создания более продвинутого диспетчера памяти.

0
ответ дан 29 November 2019 в 20:48
поделиться

«Электрический забор» - это основная отправная точка, которая может оказаться полезной. По сути, он имеет собственные реализации malloc и free, которые обеспечивают отладку.

Однако, AFAIK, он не интегрируется в операторы new / delete C ++, хотя было бы не слишком сложно предоставить настраиваемый глобальный новый / удалить реализации, которые относятся к процедурам электрического ограждения.

0
ответ дан 29 November 2019 в 20:48
поделиться

Какая у вас платформа? Просто подумайте, могут ли вам помочь валгринд или линт, прежде чем вы попытаетесь заменить кухонную раковину?

-2
ответ дан 29 November 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: