Что происходит, когда приложение запускается?
Когда приложение запускается, распределитель инициализирует себя. Вы можете сделать это при первом вызове своего распределителя, если хотите.
И как распределитель узнает, что кучи уже созданы?
Я не уверен, что следую этому вопросу. Если вы говорите о кучах, которыми управляет код, который использует этот самый распределитель, он обнаруживает, что он создает записи отслеживания, когда он создает кучи. Если вы говорите о кучах в других процессах или создаете другие распределители, все равно, поскольку он не может использовать эти кучи в любом случае.
Как распределитель создает, хранит и уничтожает (при закрытии приложения) кучи?
Как правило, у вас есть низкоуровневый и высокоуровневый распределитель. Низкоуровневый распределитель просто получает необработанные куски памяти из операционной системы. Точный механизм специфичен для платформы. Высокоуровневый распределитель управляет кучами, и он получает память для хранения структур кучи из низкоуровневого распределителя.
Когда функция вызывается, как узнать, в какой строке (или на каком процессоре) она работает?
Вы можете узнать, какой поток содержит данные, зависящие от потока, или путем вызова функции «get thread ID» для конкретной платформы. Что касается процессора, он очень специфичен для платформы, и к моменту его получения информация может быть устаревшей. У большинства платформ есть такая функция - просто помните, что вы можете использовать ее только как оптимизацию (чтобы уменьшить конфликт блокировок или улучшить скорость атаки кеша). Критически, вы не можете использовать его для обхода блокировки, потому что поток может перемещаться из одного процессора в другой в любое время.
Честно говоря, распределение памяти, обеспечивающее хорошую производительность и переносимое по платформам, действительно является случаем тяжелого волшебства. Если вы не являетесь экспертом в этой области, маловероятно, что вы сможете разработать распределитель, обеспечивающий производительность и стабильность, необходимые для производственного приложения.
Ознакомьтесь с http://stackoverflow.com/questions/3358045/how-are-malloc-and-free-implemented за хорошую информацию. –
Единственная документация, которую я могу найти о том, как работает Hoard, - это исходный код. Лично я просто рекомендую вам либо использовать версию GPL для Hoard, либо получить того, кто финансирует вас, чтобы получить лицензионный сбор за коммерческую версию. – Omnifarious
Я думаю, что у вас есть фундаментальное непонимание роли, которую играют роль распределителей пользовательского пространства. Трудно понять, почему вы задали бы вопрос 3 в противном случае. –